Spring-自动装配

1.通过xml配置文件中的autowire来实现spring的自动装配,目的是为了简化Spring的配置

1.自动装配的几种方式:

1.ByName:通过我们注入的Bean对象中设置的autowire="ByName",得到Bean对象中的需要的依赖对象的属性的名称(也就是set方法的属性名称,也就是说所依赖对象的属性必   须有setter方法),然后查找所依赖的对象是否被Spring容器创建,如果已经创建,则会把我们所依赖的对象自动注入进来,如果没有创建,则不会注入

<bean id="studentDAO" class="com.ioc.demo.StudentDAO">bean>

<bean id="student" class="com.ioc.demo.Student" autowire="byName">bean>

2.如果我们一个Bean对象要依赖多个对象,这个时候我们在使用ByName会非常麻烦,所以Spring为我们提供了一种配置全局自动装配都使用ByName方式

 
   
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd" default-autowire="byName">

3.ByType:通过我们注入的Bean对象中设置的autowire="ByType",找到我们所依赖对象的setter方法里面的参数类型,根据参数类型去Spring容器中查找Bean对象,如果已经创建,则会把我们所依赖的对象自动注入进来,如果没有创建,则不会注入

  4.在使用BytType方式装配时,被依赖的Bean对象可以忽略id,但是不允许有两个相同类型的Bean对象,否则会报错

  5.no:表示不设置装配方式

6.constructor:使用有参构造器来装配,当我们使用构造器来实例化对象的时候,推荐使用ByType方式来装配

  1.No:即不启用自动装配。Autowire默认的值。默认情况下,需要通过"ref"来装配bean,

2.byName:按名称装配? 可以根据属性的名称在容器中查询与该属性名称相同的bean,如果没有找到,则属性值为null
3.byType:按类型装配? 可以根据属性类型,在容器中寻找该类型匹配的bean,如有多个,则会抛出UnsatisfiedDependencyException异常,如果没有找到,则属性值为null。
4.constructor:与byType方式相似,不同之处在与它应用于构造器参数,如果在容器中没有找到与构造器参数类型一致的bean,那么将抛出异常。(根据构造函数参数的数据类型,进行byType模式的自动装配。)
5.autodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是byType的方式进行自动装配。如果Bean有空构造器那么将采用“byType”自动装配方式,否则使用“constructor”自动装配方式。
6.default:由上级标签的default-autowire属性确定。

7.注意:在配置bean时,标签中Autowire属性的优先级比其上级标签高,即是说,如果在上级标签中定义default-autowire属性为byName,而在中定义为byType时,Spring IoC容器会优先使用标签的配置。

8.我们不推荐使用自动装配,推荐使用annotation(注解)

你可能感兴趣的:(Spring-自动装配)