自动装配,官方给出的定义是这样:
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系。因此,如果可能的话,可以自动让Spring通过检查BeanFactory中的内容,来替我们指定bean的协作者(其他被依赖的bean)。由于autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用。autowire的方便之处在减少或者消除属性或构造器参数的设置,这样可以给我们的配置文件减减肥 其实,自动装配就是让我们少些几个 <ref
="...">. 我们还是从需求出发.我们假设有4个bean.分别是bean2,bean3,bean4,bean5..其中,bean2里面有后面几个 的引用..我只放出来bean2.java. package
com.test.model;
public class Bean2 { private
Bean3 bean3; private Bean4 bean4;
private Bean5 bean5; public
Bean3 getBean3() {
return bean3;
} public
void setBean3(Bean3 bean3) {
this.bean3 = bean3;
} public
Bean4 getBean4() {
return bean4;
} public
void setBean4(Bean4 bean4) {
this.bean4 = bean4;
} public
Bean5 getBean5() {
return bean5;
} public
void setBean5(Bean5 bean5) {
this.bean5 = bean5;
}
}
我们看不用自动装配的写法 <bean
id="bean2" class="com.test.model.Bean2">
<property name="bean3" ref="bean3"/>
<property name="bean4">
<ref bean="bean4"/>
</property>
<property name="bean5" ref="bean5"/>
</bean> 很明显,下面的几个属性设置是很繁琐的..我们假设使用自动装配.我们只需要这样 <bean
id="bean2" class="com.test.model.Bean2" /> 里面的装配都不用写. 另外: 模式
说明
no
不使用自动装配,必须通过ref元素指定依赖,默认设置。
byName
根据属性名自动装配。此选项将检查容器并根据名字查找与
属性完全一致的bean,并将其与属性自动装配。
byType
如果容器中存在一个与指定属性类型相同的bean,那么将与
该属性自动装配;如果存在多个该类型bean,那么抛出异
常,并指出不能使用byType方式进行自动装配;如果没有找
到相匹配的bean,则什么事都不发生,也可以通过设置
dependency-check="objects"让Spring抛出异常。
constructor
与byType方式类似,不同之处在于它应用于构造器参数。如
果容器中没有找到与构造器参数类型一致的bean,那么抛出
异常。
autodetect
通过bean类的自省机制(introspection)来决定是使用
constructor还是byType方式进行自动装配。如果发现默认的
构造器,那么将使用byType方式。 JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。 javaBean自省技术
javaBean 具有的自省机制可以在不知道javaBean都有哪些属性的情况下,设置他们的值。。 自省机制的核心是反射机制。 javaBean的自省机制主要由Introspector实现,该接口中提供了关键的方法。
|