Spring依赖注入详解

Spring依赖注入详解

介绍:

  所谓依赖注入就是指:在运行期间,有外部容器动态地将依赖对象注入到组件中

分为:

1.setter方法注入
2.使用构造器注入
3.使用Field注入(用于注解方式)

4.使用静态工厂的方法注入

5.普通工厂类的方法注入

一、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类 给了 Name 和 Age 两个简单的属性:
spring.xml中:
	<bean class="com.test.spring.Person">
		<property name="name" value="LYW"/>
		<property name="age" value="21"/>
	</bean>
这样配置Bean Person类就被Spring管理了起来
  例如2:
还有一种复杂的情况:如果Person类 包含了一个Type对象属性,配置就比较繁琐:
Person.Java
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.Java
public class Type {
	private String typeName;
	public void setTypeName(String typeName){
		this.typeName= typeName;
	}
}
以上这种情况 如何配置?
有两种方法:1、内置Bean方式:
	<bean class="com.test.spring.Person">
		<property name="name" value="LYW"/>
		<property name="age" value="21"/>
		<property name="type">
			<bean class="com.test.spring.Type">
				<property name="typeName" value="Coding"/>
			</bean>
		</property>
	</bean>
2、或者采引入属性的方法 :
spring.xml
<bean class="com.test.spring.Type" id="type">
		<property name="typeName" value="Coding"/>
	</bean>

<bean class="com.test.spring.Person">
		<property name="name" value="LYW"/>
		<property name="age" value="21"/>
		<property name="type" ref="type"> </property>
     </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 id="person" class="com.test.spring.Person
 		<constructor-arg name="name" value="LYW" />
                <constructor-arg name="age" value="21" />
      </bean>
这是简单的构造注入
在配置时 name可以不写 不写会默认按照顺序 注入 
也根据属性类型注入 <constructor-arg type="int" value="21" /> 这样 不写name 写个type也可以区分

三、注解注入

列如:
UserDao.java
@Repository
public class UserDao {

    public void sayHello(String name) {
        System.out.println("Hello\t"+name);
    }

}
UserService.java
@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public void sayHello(String name) {
        this.userDao.sayHello(name);
    }
}
spring.xml
 <context:annotation-config />
    <context:component-scan base-package="com.lyw.*" >
    </context:component-scan>
这样就可以使用注解的方式注入

四、静态工厂注入

使用静态工厂方法创建Bean实例时,class属性也必须指定,但此时class属性并不是指定Bean实例的实现类,而是静态工厂类。因为Spring需要知道是用哪个工厂来创建Bean实例。另外,还需要使用factory-method来指定静态工厂方法名,Spring将调用静态工厂方法(可能包含一组参数),来返回一个Bean实例,一旦获得了指定Bean实例,Spring后面的处理步骤与采用普通方法创建Bean实例则完全一样。需要注意的是,当使用静态工厂方法来创建Bean时,这个factory-method必须要是静态的。
通俗点讲,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取: 

public interface Person(){
    public void sayHello();
}

下面是接口的两个实现类:

public class Work implements Person {
    private String msg;
    //依赖注入时必须的setter方法
    public void setMsg(String msg){
        this.msg = msg;
    }
    @Override
    public void sayHello(){
        System.out.println(msg + ",你好");
    }
}

public class Teacher implements Person {
    private String msg;
    //依赖注入时必须的setter方法
    public void setMsg(String msg){
        this.msg = msg;
    }
    @Override
    public void sayHello(){
        System.out.println(msg + ",Hello");
    }
}
下面的PersonFactory工厂中包含了一个getPerson的静态方法,该方法将根据传入的参数决定创建哪个对象。这是典型的静态工厂设计模式。
public class PersonFactory {
    public static Animal getPerson(String type){
        if ("work".equalsIgnoreCase(type)){
            return new Work();
        } else {
            return new Teacher();
        }
    }
}
spring.xml配置
<bean id="work" class="com.lyw.spring.PersonFactory" factory-method="getPerson">
    <!-- 配置静态工厂方法的参数 -->
    <constructor-arg value="work" />
    <!-- 通过setter注入的普通属性 -->
    <property name="msg" value="工人" />
</bean>
<bean id="teacher" class="com.lyw.spring.PersonFactory" factory-method="getPerson">
    <constructor-arg value="teacher" />
    <property name="msg" value="老师" />
</bean>

这样就配置完了Spring了

五、普通工厂类的方法注入

public class PersonFactory {  
  
    public Person createPerson(){  
        Person person = new Person();  
        person.setName("LYW");  
        person.setAge(22);  
        return person;  
    }  
      
}  

spring.xml配置文件 
<bean id="personFactory" class="com.lyw.spring.PersonFactory"></bean>  
<bean id="person" factory-bean="personFactory" factory-method="createPerson"></bean>  
这样配置就可以了 

以上就是我对Spring注入的总结 希望可以喜欢 


作者:孩子你狠幼稚,真的很幼稚
出处:http://blog.csdn.net/lu1005287365/
如果,您认为阅读这篇博客让您有些收获,不妨点击一下下面的赞【赞一下】
如果,您希望有什么感觉不对的地方欢迎在下面评论【评一下】
如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【LYW】

本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章