作者回复: 1. 如果 SpringIoC 容器添加了 AbstractAutoProxyCreator 的 Bean 的话,几乎所有的 Bean(除了有些加载更早 Spring 内建的 Bean)在早期实例引用或初始化对象时都去判断其方法上有 Caching 相关的注解,如有有的话,那么该方法则是一个切面,会对应 Caching 相关的 Advice。 2. 这个需要考虑两种情况,其一如果代理对象是基于 CGLib 提升的话,那么代理类是原 Bean 类的子类,所以当 Bean 被包装(替换)成代理 Bean 后,其类型结构保持了原 Bean 的,所以该有的生命周期回调还是会按照之前的方式进行。如果代理对象是基于 JDK 动态代理的话,那么,代理对象会动态地实现其原 Bean 类中的接口,所以当 Bean 被包装为代理对象时,它仍旧实现了相关生命周期接口,当生命周期接口方法被执行时,实际调用的是原 Bean 对象方法。 3. 如果判断成功,spring bean 会被替换为 proxy 代理对象,当框架通过 getBean 实际上获取的是 proxy 对象。
作者回复: 注册的是AutoProxyCreator 的子类,Caching 有独立的注解 @EnableCaching