上一篇博客中介绍了自动装配bean,本篇博客将介绍怎么通过Java代码装配bean。
package lm.practice.bean; import lm.practice.bean.impl.CompactDiscImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * Created by Administrator on 2017/4/17. */ /** * 使用注解的方式启用组件扫描 * @Configuration: 这个注解表示该类是一个配置类, * 该类应该包含在Spring应用上下文中如何创建bean的细节 */ @Configuration @ComponentScan public class CDPlayerConfig { /** * @Bean: 会告诉spring这个方法将会返回一个对象,该对象要注册为Spring应用上下文中的bean * 默认情况下,bean的id与@Bean注解的方法名一样。可以通过@Bean(name="anotherName")设置name属性值修改为不同的名字 * 方法体中包含了最终产生的bean实例的逻辑 * @return */ @Bean public CompactDisc compactDiscImpl(){ return new CompactDiscImpl(); } @Bean public CDPlayer cdPlayer(){ //看起来cdPlayer方法是通过调用compactDiscImpl方法执行的,实际上并非如此 //方法上有@Bean注解,Spring将会拦截所有对它的调用, // 并确保直接返回该方法所创建的bean,而不是每次都对其进行实际的调动 return new CDPlayer(compactDiscImpl()); } }
上面的这个代码注释的很详细:
1.首先需要用注解@Configuration标记该类为配置类,这个类中包含了Spring应用上下文中的bean配置的细节。
2.然后用注解@Bean标注方法,该方法是返回一个对象,该对象要注册为Spring应用上下文的bean
3.通过JavaConfig注入bean,最简单的就是引用创建bean的方法。即cdPlayer这个方法中的写法,当Spring调用该方法创建CDPlayerbean的时候,它会自动装配一个ComoactDisc到配置方法中。看似是通过调用compactDiscImpl方法执行该方法,实际上Spring会拦截所有对它的调用,并且确保直接返回该方法所创建的bean。
上面的注入bean的方法cdPlayer可能看起来有些迷惑,可以采用另外一种清晰的写法:
@Bean public CDPlayer cdPlayer(CompactDisc compactDisc){ return new CDPlayer(compactDisc); }在这里,cdPlayer方法请求一个CompactDisc作为参数。 当Spring调用该方法创建CDPlayerbean的时候,它会自动装配一个ComoactDisc到配置方法中。