为什么Spring cglib增强的子类无法扩展父级受保护的属性?

时间:2019-07-17 14:35:06

标签: spring cglib

有一个具有受保护属性的抽象类,

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属性?

1 个答案:

答案 0 :(得分:0)

由于Repository注释提供了额外的功能,https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/data-access.html#orm-exception-translation

  

后处理器自动查找所有异常翻译器(PersistenceExceptionTranslator接口的实现),并建议所有标有@Repository批注的bean,以便发现的翻译器可以拦截并对抛出的异常应用适当的翻译。