Spring的自动装配:
自动装配主要有两种方式:byName和byType。
byName:会根据Field的名字进行装配,会查找beanId及beanName选出符合进行装配。
byType:会根据Field的类型进行装配,会去查找bean的class类型选出符合进行装配。
如下xml配置文件:如果是byName则回去查找id属性,后者则去找对应的class属性进行装配。
<bean id="userService" class="com.mirac.service.UserService">
</bean>
@Autowired
该注解是Spring的注解,可以使用在构造方法上、set方法、参数和字段上。可以定义required属性(默认为true),当定义为false时找不到装配对象时则不进行装配,否则:通过byType进行装配,如果只找到一个则进行装配,如果找到多个则通过注入的对象变量名称作为bean的id在spring容器中查找,找到则注入成功,找不到则会抛出异常。
注意:当使用注解注入属性(字段)时,set方法可以省略。
@Resource
该注解是JSR-250的注解,可以使用在set方法和字段上。属性有name和type,如果未指定name和type的值则默认按照byName进行查找。根据不同的属性查找规则如下:
1、如果指定了name属性,则按照name查找,找到且类型匹配则装配,否则配抛出异常
2、如果指定了name和type属性,则按照name和type精确查找,找到则装配,找不到抛出异常
3、如果仅指定了type属性,则按照type查找,如果只找到一个则装配,否则抛出异常
4、如果name和type都没有指定,则默认按照作用的属性名字查找,找到则装配,找不到则按照类型找,找到一个则装配,找不到或者找到多个抛出异常
以上两注解推荐使用@Resource注解,可以减少与spring的耦合,同时针对byName和byType有更多的选择方式,实现精确地装配。
@Qualifier
该注解是spring的注解,有属性name用于指定bean的id。在自动按照类型装配的基础之上,再按照bean的id注入。它在给字段注入时不能独立使用,必须和@Autowired一起使用(用于解决通过byType装配时找到多个符合的bean);但是给方法参数注入时,可以独立使用。
注意:以上三个注解都只能注入(装配)其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。另外,集合类型的注入只能通过xml来实现。
@Value
该注解是spring的注解,有属性value用于指定值。该注解注入基本数据类型和string类型数据。