您的位置:首页 > 编程语言 > Java开发

Spring的两种常见的注入

2016-01-08 00:00 549 查看
摘要: 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。

spring有多种依赖注入的形式,下面仅介绍spring通过xml进行IOC配置的方式:

1, Set注入

需要配置的bean.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<description>Spring quick start</description>

<bean id="student" class="org.heinrich.action.Student">
<property name="user" ref="user">

</property>
</bean>
<bean id="user" class="org.heinrich.action.User"></bean>
</beans>

两个实体类 Student , User

package org.heinrich.action;

public class User {

public void read(){

System.out.println("I am reading Book of Thinking Java");
}

}

package org.heinrich.action;

public class Student {

private User user;

public void testDi(){

user.read();
}

public void setUser(User user) {
this.user = user;
}

}

测试SpringTest类

package org.heinrich.action;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {

public static void main(String[] args) {

ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
Student student = (Student)ctx.getBean("student");

student.testDi();

}

}

显示的结果

I am reading Book of Thinking Java

其中bean.xml还可以配置成

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<description>Spring quick start</description>

<bean id="student" class="org.heinrich.action.Student">
<property name="user">
重点:		<bean id="user" class="org.heinrich.action.User"></bean>
</property>
</bean>

</beans>

2, 构造器注入

主要代码Student类需要给一个构造方法,参数是需要注入的类型

package org.heinrich.action;

public class Student {

private User user;

public Student(User user) {
super();
this.user = user;
}

public void testDi() {

user.read();
}

}

然后配置bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<description>Spring quick start</description>

<bean id="student" class="org.heinrich.action.Student">
<constructor-arg ref="user"/>
</bean>
<bean id="user" class="org.heinrich.action.User"></bean>
</beans>

bean.xml还有另外一个配置方式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<description>Spring quick start</description>

<bean id="student" class="org.heinrich.action.Student">
<constructor-arg>
<bean id="user" class="org.heinrich.action.User"></bean>
</constructor-arg>
</bean>

</beans>

测试结果

I am reading Book of Thinking Java
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: