Java spring使用的代理模式
我在学春天:) 我有以下疑问:Java spring使用的代理模式,java,spring,proxy,Java,Spring,Proxy,我在学春天:) 我有以下疑问: spring是否为每个bean创建代理对象,即使我没有使用注释,例如@Transactional,我认为它需要代理 我在书中读到以下内容 注意,对静态@Bean方法的调用永远不会被容器拦截,甚至在@Configuration类中也是如此(见上文)。这是由于技术限制:CGLIB子类化只能覆盖非静态方法。因此,对另一个@Bean方法的直接调用将具有标准Java语义,从而直接从工厂方法本身返回一个独立实例 a。在下面的示例中,Spring不返回代理对象,因为静态方法是无
@Configuration
public class Config {
@Bean
public static Student student() {
return new Student();
}
}
b。“注意,对静态@Bean方法的调用永远不会被容器拦截,即使在@Configuration类中也不会被拦截”的含义是什么。是的,你说得对。您将获得原始对象
b。student()方法位于用@Configuration annotation注释的类Config中。spring通过创建代理来拦截@Configuration类中用@Bean注释的所有方法。所以,由于您的方法是静态的,尽管它在Config类中,但它不会被Spring截获,也不会创建任何代理 然后回答问题1。spring是否为每个bean创建代理并为此使用基于jdk接口的代理?是的,如果每个bean的生命周期由spring控制,spring将为其创建代理。如果您的Springbean类正在扩展任何接口,spring将使用基于JDK的代理。如果它不扩展任何接口,它将使用基于CGLIB的代理。