在Spring的@Configuration
注解中叭披,proxyBeanMethods
屬性用于控制是否啟用基于CGLIB的代理機(jī)制來創(chuàng)建@Bean
方法返回的對象诞吱。
默認(rèn)情況下寻定,proxyBeanMethods
屬性的值為true
辖源,即啟用代理機(jī)制蔚携。這意味著Spring會為@Configuration
注解標(biāo)記的類創(chuàng)建一個代理對象,并攔截@Bean
方法的調(diào)用克饶,以確保每次調(diào)用都返回同一個實(shí)例酝蜒。這種代理機(jī)制可以保證@Bean
方法的調(diào)用是被攔截的,從而可以應(yīng)用Spring的其他特性矾湃,例如AOP切面亡脑、事務(wù)管理等。
當(dāng)proxyBeanMethods
屬性的值為false
時邀跃,Spring將不會為@Configuration
注解標(biāo)記的類創(chuàng)建代理對象霉咨。這意味著每次調(diào)用@Bean
方法都會實(shí)際執(zhí)行該方法,并返回一個新的實(shí)例拍屑。這種情況下途戒,@Bean
方法的調(diào)用將不會被攔截,也不會應(yīng)用其他的Spring特性僵驰。
使用proxyBeanMethods
屬性可以靈活地控制@Configuration
類中@Bean
方法的代理行為喷斋。如果您的@Bean
方法沒有副作用,且不需要攔截和其他Spring特性的應(yīng)用蒜茴,可以將proxyBeanMethods
屬性設(shè)置為false
星爪,以避免代理的開銷。
以下是一個示例:
@Configuration(proxyBeanMethods = false)
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
// 其他 @Bean 方法...
}
在上述示例中粉私,MyConfiguration
類的@Bean
方法將直接返回一個新的MyBean
實(shí)例顽腾,而不會被代理攔截。這樣可以確保每次調(diào)用myBean()
方法都會返回一個新的實(shí)例诺核。
需要注意的是抄肖,proxyBeanMethods
屬性只在@Configuration
注解上生效秒赤,對于其他的注解(例如@Component
、@Service
等)不起作用憎瘸。