Spring依赖注入详解
2016-07-28 14:03
441 查看
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共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- NopCommerce架构分析(一)Autofac依赖注入类生成容器
- JavaScript中的依赖注入详解
- 浅析依赖注入框架Autofac的使用
- 浅析Node.js中使用依赖注入的相关问题及解决方法
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 监听器获取Spring配置文件的方法
- Java利用Sping框架编写RPC远程过程调用服务的教程
- springmvc 发送ajax出现中文乱码的解决方法汇总