有一个具有受保护属性的抽象类,
public abstract class Base {
protected long time = System.currentTimeMillis();
}
并且有两个类扩展Base
@Component
public class A extends Base {
}
@Repository
public class B extends Base{
}
唯一的区别是他们正在使用diff注释。
现在有测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class BaseTest {
@Autowired
private A a;
@Autowired
private B b;
@Test
public void test() throws InterruptedException {
System.out.println(a.time); // 1563372891999
System.out.println(b.time); // 0
System.out.println();
System.out.println(a.getClass().getSimpleName()); // A
System.out.println(b.getClass().getSimpleName()); // B$$EnhancerBySpringCGLIB$$b08d2d91
}
}
为什么Spring cglib增强了B
不能扩展time属性?
答案 0 :(得分:0)
由于Repository
注释提供了额外的功能,https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/data-access.html#orm-exception-translation
后处理器自动查找所有异常翻译器(PersistenceExceptionTranslator接口的实现),并建议所有标有@Repository批注的bean,以便发现的翻译器可以拦截并对抛出的异常应用适当的翻译。