【Spring】Spring依赖注入IOC的设值注入setter

其实标题中如此高大上的名词,只是一个问题,关于在Spring的applicationContext.xml中的如下语句是什么意思?

<property name="aService" ref="aService"/>
这类语句在SSH的配置中会大量存在,因为Spring所谓的核心机制就是Spring依赖注入IOC。下面举一个例子说明这个问题:

先贴上目录结构:

【Spring】Spring依赖注入IOC的设值注入setter_第1张图片

在Eclipse中新建一个Java工程,不是JavaWeb,在这个Java配置好Spring3.0.5,这个在《【Spring】Spring3.0.5的下载、配置与Helloworld》(点击打开链接)已经说过了,这里不再赘述,然后先在src文件夹中新建一个applicationContext.xml,里面的内容如下:

<?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-3.0.xsd">
	<!-- 指明A.java中的aService类,来自service包下AService.java -->
	<!-- A.java中就无须AService aService=new AService();这条语句了 -->
	<bean id="aJava" class="A">
		<property name="aService" ref="aService"/>
	</bean>
	<bean id="aService" class="service.AService"/>
</beans>
然后src新建一个A.java,里面的内容的如下:

import service.*;
public class A {
	private AService aService;
	public void setaService(AService aService) {
		this.aService = aService;
	}
	public void print() {
		System.out.println("A.java在是用AService的print()方法:" + aService.print());
	}
}
之后,在src中新建一个service包,在service里面新建一个AService.java,代码如下:

package service;
public class AService {
	public String print() {
		return "呵呵";
	}	
}
之后再于src包里面新建一个SpringTest.java,这个java将包含主函数,是程序的入口,里面的代码如下:

import org.springframework.context.*;
import org.springframework.context.support.*;


public class SpringTest {
	public static void main(String[] args) {
		//初始化Spring
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
		//为这个SpringTest.java注入A.java这个类,
		A a=applicationContext.getBean("aJava",A.class);
		//注入之后可以直接使用A这个类
		a.print();
	}
}
这样就可以运行了,运行结果如下:

【Spring】Spring依赖注入IOC的设值注入setter_第2张图片

那么,上面这个程序到底是在说明什么问题呢?就是在说,因为Spring依赖注入IOC的设值注入setter还有Spring自身的特性,以致于整个工程没有一个new语句,方便简单,符合架构设计的规范。因为其下有如下的传值的过程:


非常显然的是,这里当然可以用一句简简单单的System.out.println语句完成,即使要用类,也可以用import与static等语句。不过Spring在JavaWeb工程中,大量的Hibernate语句与数据库查询方法,Struts的Action方法,能够把将其管理起来。

假设上面的A.java是关于Struts2的Action的java文件,AService.JAVA是Hibernate的数据库业务类。那么,你可能不会觉得Spring是在呵呵了。

你可能感兴趣的:(spring,javaee,架构设计,IOC,javaweb)