spring依赖注入DI

关于Bean的三种装配方式请查看:https://blog.csdn.net/qq_41357573/article/details/84382815

依赖注入

依赖注入的本质就是装配,装配是依赖注入的具体行为

简介

在应用中,按照传统的做法,每个对象负责管理与自己相互协调的对象(即所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码 通过DI,对象的依赖关系由系统中负责协调各部件的第三方组件在创建对象的时候进行设定,对象无需自己创建和管理他们的依赖关系,依赖关系将被自动注入到他们所需要的对象当中去

Setter方法注入

例如1:

public class Person{
    private String name;
    private int age;
   public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

上面是一个纯粹的POJO类
spring.xml

<!-- 装配Pserson-->
<bean id="person" class="com.test.spring.Person">
    <property name="name" value="yq"/>
    <property name="age" value="23"/>
</bean>
这样Bean Person类就被spring管理了起来 还有一种复杂的情况:如果Person类包含了一个Type对象属性,配置就比较繁琐
例2: Pserson类
public class Person {
	private String name;
	private int age;
        private Type type;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void setType(Type type) {
		this.type = type;
	}
}

Type类:

public class Type{
    private String typeName;
    public void setTypeName(String typeName){
        this.typeName = typeName;
    }
}
  • 有两种配置方法
    第一种:内置Bean的方式
<bean class="com.test.spring.Person">
    <property name="name" value="yq"/>
    <property name="age" value="23"/>
    <property name="type">
        <bean class="com.test.spring.Type">
            <property name="typeName" value="Coding"/>
        </bean>
    </property>

第二种:采用属性的方法

<bean class="com.test.spring.Type">
    <property name="typeName" value="Coding"/>
</bean>
<bean class="com.test.spring.Pserson">
    <property name="name" value="yq"/>
    <property name="age" value="23"/>
    <property name="type" ref="type"/>
</bean>

构造器注入

* 这种方式的注入是带有参数的构造函数注入
例如:Person类
public class Person {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
}

Spring.xml中配置

  • 将字面量注入到构造器中
<!--第一步进行Bean的xml显示装配-->
<bean id="pserson" class="com.test.spring.Person">
    <constructor-arg name="name" value="yq"/>
    <constructor-arg name="age" value="23"/>
</bean>

这是简单的构造器注入,在配置时,name属性可以不写,如果不写会按照默认的属性注入
也可以根据类型注入,如下:不写name,用type进行区分

<constructor-org type="int" value="23"/>

注解注入

查看另一篇文章:
https://blog.csdn.net/qq_41357573/article/details/84445374

猜你喜欢

转载自blog.csdn.net/qq_41357573/article/details/84445743