Spring 提供了自动装配(自动识别如何装配Bean的依赖关系)和自动检测(检测哪些类需要被配置成Spring Bean)
1、自动装配Bean的属性
1.1四种类型得自动装配:byName、byType、constructor、autodetect
a、byName
通过设置autowire属性为byName,为属性自动装配ID与该属性得名字相同的Bean,Spring发现属性名字相同的,通过setter注入来进自动装配。
举例:
b、byType
通过设置autowire属性为byType,Spring会查找哪个Bean的类型与属性的类型一样,进行自动装配。当有多个相同类型的Bean可供装配属性时,Spring会抛出异常。为了解决这个问题,Spring提供了两种选择:可以标识一个首选Bean,或者取消某个Bean自动装配的候选资格。若只有一个候选Bean的primary属性为true,则该bean比其他候选bean优先被选择。但是在Spring中所有Bean默认primary为true,所以采用设置某个bean的primary属性为false来取消这儿bean的首选资格。如果需要排除某些bean的候选资格,则设置这些Bean的autowire-candidate属性为false。
c、constructor 自动装配
d、最佳自动装配
设置autowire属性为autodetect,Spring将首先尝试使用constructor自动装配,如果没有发现与构造器相匹配的Bean时,Spring将尝试使用byType自动装配。
1.2 默认自动装配
在Beans上增加一个default-autowire属性。当然我们也可以在bean中使用autowire属性来覆盖beans所配置的默认属性。default-autowire应用于指定Spring的配置文件中的所有bean,而不是应用于Spring 应用上下文所有的bean。
1.3 混合使用自动装配和显示装配
使用自动装配时,仍然可以为任意一个属性配置<property>元素。但是当使用constructor自动装配策略时,必须让Spring自动装配构造器的所有人参,不能混合使用<constructor-arg>元素