📅  最后修改于: 2020-12-04 07:49:02             🧑  作者: Mango
Spring框架的自动装配功能使您可以隐式注入对象依赖项。它在内部使用setter或构造函数注入。
自动装配不能用于插入原始值和字符串值。它仅适用于参考。
它需要较少的代码,因为我们不需要编写代码来显式注入依赖项。
不能控制程序员。
不能用于原始值和字符串值。
自动装配模式很多:
No. | Mode | Description |
---|---|---|
1) | no | It is the default autowiring mode. It means no autowiring bydefault. |
2) | byName | The byName mode injects the object dependency according to name of the bean. In such case, property name and bean name must be same. It internally calls setter method. |
3) | byType | The byType mode injects the object dependency according to type. So property name and bean name can be different. It internally calls setter method. |
4) | constructor | The constructor mode injects the dependency by calling the constructor of the class. It calls the constructor having large number of parameters. |
5) | autodetect | It is deprecated since Spring 3. |
让我们看一下在春天使用自动装配的简单代码。您需要使用bean元素的autowire属性来应用自动装配模式。
让我们看一下Spring自动布线的完整示例。为了创建此示例,我们创建了4个文件。
此类仅包含构造函数和方法。
package org.sssit;
public class B {
B(){System.out.println("b is created");}
void print(){System.out.println("hello b");}
}
此类包含B类的引用以及构造函数和方法。
package org.sssit;
public class A {
B b;
A(){System.out.println("a is created");}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
void print(){System.out.println("hello a");}
void display(){
print();
b.print();
}
}
此类从applicationContext.xml文件获取Bean并调用display方法。
package org.sssit;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
A a=context.getBean("a",A.class);
a.display();
}
}
输出:
b is created
a is created
hello a
hello b
在byName自动装配模式下,bean ID和引用名称必须相同。
内部使用setter注入。
但是,如果更改bean的名称,它将不会注入依赖项。
让我们看看将Bean名称从b更改为b1的代码。
在byType自动装配模式下,bean ID和引用名称可能不同。但是,只能有一个类型的bean。
内部使用setter注入。
在这种情况下,它可以正常工作,因为您已创建了B类型的实例。 Bean名称与引用名称不同也没关系。
但是,如果您有一个类型的多个bean,它将无法工作并引发异常。
让我们看一下其中有许多B型bean的代码。
在这种情况下,它将引发异常。
在构造器自动装配模式下,spring容器通过参数化最高的构造器注入依赖项。
如果一个类中有3个构造函数,零参数,一个参数和两个参数,则将通过调用两个参数构造函数来执行注入。
在没有自动装配模式的情况下,spring容器不会通过自动装配注入依赖项。