Spring依赖注入详解
介绍:
分为:
1.setter方法注入
2.使用构造器注入
3.使用Field注入(用于注解方式)
4.使用静态工厂的方法注入
5.普通工厂类的方法注入
一、Setter方法注入:
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;
}
}
<bean class="com.test.spring.Person">
<property name="name" value="LYW"/>
<property name="age" value="21"/>
</bean>
例如2:
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.Javapublic class Type {
private String typeName;
public void setTypeName(String typeName){
this.typeName= typeName;
}
}
以上这种情况 如何配置? <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>
上下两种配置方式 建议使用下面这种 看起来 方便 不杂乱
二、构造器注入: 这种方式的注入是指带有参数的构造函数注入
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>
这是简单的构造注入三、注解注入
@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>
这样就可以使用注解的方式注入四、静态工厂注入
通俗点讲,就是通过调用静态工厂的方法来获取自己需要的对象,为了让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>
这样配置就可以了
作者:孩子你狠幼稚,真的很幼稚
出处:http://blog.csdn.net/lu1005287365/
如果,您认为阅读这篇博客让您有些收获,不妨点击一下下面的赞【赞一下】
如果,您希望有什么感觉不对的地方欢迎在下面评论【评一下】
如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【LYW】
本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。