通过Java代码装配bean
例如,需要将第三方库的组件加载到你的应用中,此时无法给他的类上添加@Component和@Autowired注解,此时不能使用自动化装配了。
这种情况下,就必须使用显式装配的形式,可以选择Java代码装配或Xml装配
建议:显式配置是优先使用JavaConfig装配,因为他强大、类型安全且对重构友好;因为他和业务代码无关,应放到单独的包中
@Configuration
告诉Spring,这是一个Spring配置类,用来配置Spring应用上下文如何配置bean
@Bean
创建一个方法,用来产生类的实例,并告诉Spring,这个实例要注册为Spring应用上下文中的bean
package soundsystem; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CDPlayerConfig { @Bean public CompactDisc sgtPeppers() { return new SgtPeppers(); } @Bean public CDPlayer cdPlayer1() { return new CDPlayer(sgtPeppers()); } @Bean public CDPlayer cdPlayer2(CompactDisc compactDisc) { return new CDPlayer(compactDisc); } }
首先,使用new SgtPeppers()的实例,为CompactDisc类型创建一个bean
cdPlayer1中,通过直接调用SgtPeppers()方法获取实例,看似每次调用cdPlayer1,都会产生一个新的CompactDisc实例,但实际上,因为SgtPeppers()方法添加了@bean备注,Spring会拦截其调用,如果已创建bean则直接返回bean,不会重新创建。
cdPlayer2中,给这个方法添加了@Bean注解,Spring会在调用的时候为参数找到对应类型的实例,自动注入
其中cdPlayer2的方式更符合实际代码的运行,建议使用这种方式,方便理解。