以前我们在配置spring文件的时候一般都是这么写
<bean id="test" class="com.test.Test" autowire="byName">
<property name="song" ></property>
</bean>
autowire有4种自动装配的类型
byName 把与bean的属性具有相同名字(或者id)的其他bean自动配置到bean对应的属性中。
byType 把与bean的属性具有相同类型的其他bean自动配置到bean对应的属性中。
constructor 把与bean的构造器入参具有相同类型的其他bean自动配置到bean对应的属性中。
autodetect 首先尝试使用constructor进行自动装配。如果失败在使用byType进行装配。
从spring2.5开始可以使用注解自动装配。spring默认禁用注解配置,如使用,在spring的配置文件中需要开启注解。<context:annotation-config/>
此时,我们可以使用注解配置bean了。
@Autowired
private String song;
其实注解@Autowired就是配置文件中 autowire的变形。@Autowired可以用于属性,方法,构造器上。另外 可以使用@Qualifier来限定自动配置的注解的使用范围。如
@Autowired
@Qualifier("test")
private String song;
@Autowired有一个属性required,默认是true,表示自动装配。当@Autowired标注在每个构造器(重载)上的时候,只能有一个
构造器的@Autowired(required='true'),其余的都是@Autowired(required='flase')。
另外我们也可以借助@inject和@named来限定注解范围。@inject和@Autowired一样,不过@inject没有required的属性。@Named类似于spring的@Qualifier。@inject和@named都是jsr-330中的注解。
@Inject
@Named("test")
private String song;
有些时候在项目中使用的是自动检测bean的这种方法。比如
<context:component-scan base-package="com.iscc"></context:component-scan>自动扫描该包下面的bean.其实他是查找了以下注解:@Component,@Controller,@Service,@Repository,@Configuration只要找到这些注解,spring就可以自动监测bean.