bean的自动装配
Spring中有bean用三种装配方式:
(1)在xml文件中显示的配置
(2)在java中显示的配置
(3)隐式的自动装配
此处的自动装配就是第三种方式。
<1>byName自动装配
<bean id="a" class=" "/>
<bean id="b" class=" "/>
<bean id=" " class=" ">
<property name="" value=" "/>
<property name="" ref="a"/>
<property name="" ref="b"/>
</bean>
此时是手动装配。自动装配如下:
<bean id="a" class=" "/>
<bean id="b" class=" "/>
<bean id="M" class=" ">
<property name="" value=" " autowire="byName"/>
</bean>
此时会自动查找该类M中set方法参数中的属性名。即查找a和b,上文中配置了a、b。因此可以找到的该引用类型,并自动装配a、b。
注意:a、b的id名称必须对应为M类中set方法参数设置的属性名
<2>byType自动装配
使用方法将byName改为byType即可。
此时是根绝M类中应用的类查找,会在上下文中查找引用对应的class类。因此a、b的id名称可以随便取。
注意:此时如果配置同一个类的两个id。则会出错。因为此时会找到两个对应的id
<3>使用注解的自动装配
使用配置:
1、导入约束
xmlns:context="http://www.springframework.org/schema/context"
schemaLocation中加入:
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
2、使用配置
<context:annotation-config/>
(1)autowired
<bean id="a" class=" "/>
<bean id="b" class=" "/>
<bean id="M" class=" "/>
此时M若要装配a、b。则只需要在M类中,将要装配的引用类型上,加入@autowired即可(也可以在set方法上加入注解,此方法是先通过byType再通过byName实现。此时M类可以不使用set方法)
如下图:
附:
@Nullable注解表示对应的属性可以为null
@Qualifier使用:可以指定要装配的对象。(因为是通过byName方式,此时在xml文件中配置同一个类的多个id时,不会报错。而是会找到默认的dog222)
注意:Qualifier中value默认的对象只能和下面的dog是同一个类,不能默认为其它类。
java的注解:
Resource注解作用和autowire注解作用类似。它会先通过id查找,再通过class查找。当查找到多个对象时会报错。通过此方法必须查找的是唯一的对象。
通过name属性也可以设置默认装配的对象。