一、注入依赖(Dependency Injection)
● 目的:使相互协作组件保持松散耦合。
● 实现原理:通过Spring容器创建对象的实例,而不是由业务创建。使业务不用关心业务之外的事情。
二、创建Spring项目
1、Spring项目也可向Java项目一样运行,所以这里创建Java项目。只说明与Java项目有区别的。
- 这里只需注意五个地方:A类、B类、myMain类、myconfig配置、创建的文件夹lib
- 创建文件夹lib,右击mySpring项目,选择Properties,弹出的界面选择Java Build Path,如下图:
- 选择Add External JARs...导入下载的Spring包,Apply后关闭
- 其他的跟创建Java项目一样
三、实例
1、A类-实现业务打印,并调用B类的函数。B类对象在myconfig.xml通过Spring创建。
package one.dependencyInjection;
public class A {
private B b;
public A(B b) {
this.b=b;
}
public void print() {
System.out.println("调用A类的print方法,但实际是B类的");
b.print();
}
}
2、B类-也是一个业务,但与A不是同一业务。PrintStream类对象在myconfig.xml通过Spring创建。
package one.dependencyInjection;
import java.io.PrintStream;
public class B {
private PrintStream stream;
public B(PrintStream stream) {
this.stream=stream;
}
public void print() {
// TODO Auto-generated method stub
System.out.println("调用B类的print方法");
}
}
3、
注入Bean配置myconfig.xml。创建bean(即B类实例和PrintStream类实例),每一个<bean>标签代表一个实例。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="a" class="one.dependencyInjection.A">
<constructor-arg ref="b" />
</bean>
<bean id="b" class="one.dependencyInjection.B">
<constructor-arg value="#{T(System).out}" />
</bean>
</beans>
- <beans>内的是约束,这里是创建bean所需声明(我猜是Spring的API)。
- <bean id="a" ... </bean>:表示A类的实例
- <bean id="b" ... </bean>:表示B类的实例
- <constructor-arg ref="b" />:表示向所在类(这里是A类)的构造方法注入id为b的bean。
- <constructor-arg value="#(T(System).out)" />:表示向所在类(这里是B类)的构造方法注入值为System.out的bean。
4、运行类-myMain类
package one.dependencyInjection;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class myMain {
public static void main(String[] args) {
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("myconfig.xml");
A a= (A) context.getBean(A.class);
a.print();
context.close();
}
}
- ClassPathXmlApplicationContext是用于加载类路径下配置文件,所以注意myconfig的存放路径
- context.getBean(A.class):获取A类对象
四、项目下载