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

来源:互联网 发布:mwc飞控源码 编辑:程序博客网 时间:2024/05/19 00:10

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

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

先贴上目录结构:


在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/beanshttp://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) {//初始化SpringApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");//为这个SpringTest.java注入A.java这个类,A a=applicationContext.getBean("aJava",A.class);//注入之后可以直接使用A这个类a.print();}}
这样就可以运行了,运行结果如下:


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


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

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

1 0