`
在水伊方
  • 浏览: 107515 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Spring之IOC示例

阅读更多

IOC(Inversion of Control) ,所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

 

如下面的程序:

public class PersonServiceBean {   
    private PersonDAO personDAO = new PersonDAOBean();   
  
    public void save() {   
        personDAO.add();   
    }   
} 

 PersonDaoBean 是在应用内部(即PersonServiceBean类)创建及维护的。

 

当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean 类可以改成如下:  

package org.spring.service.impl;

import org.spring.dao.PersonDAO;
import org.spring.service.PersonService;

public class PersonServiceBean implements PersonService {   
    //实现接口编程,PersonServiceBean不负责依赖对象的创建及维护,   
       //依赖对象的创建及维护是由外部容器(这里指的是spring容器)负责的  
       private PersonDAO personDAO;     
       
    public PersonDAO getPersonDAO() {   
        return personDAO;   
    }   
  
    public void setPersonDAO(PersonDAO personDAO) {   
        this.personDAO = personDAO;   
    }   
  
    public void save() {   
        personDAO.add();   
    }   
} 

 

PersonService接口:

package org.spring.service;

public interface PersonService {
	public void save();
}

 

PersonDAO接口:

package org.spring.dao;

public interface PersonDAO {
	public void add();
}

 

PersonDAOBean实现类:

package org.spring.dao.impl;

import org.spring.dao.PersonDAO;

public class PersonDAOBean implements PersonDAO {
	public void add() {
		System.out.println("执行PersonDAOBean中的增加方法!");
	}
}

 

当然为了能让容器能管理我们的bean,我们还需要在spring中做如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="personDAOBean" class="org.spring.dao.impl.PersonDAOBean" />

	<bean id="personServiceBean" class="org.spring.service.impl.PersonServiceBean">
		<property name="personDAO" ref="personDAOBean" />
	</bean>

</beans>  

 

Spring容器在启动后,就会对配置文件中的所有bean进行初始化,并且把id为personDAO的bean注入到id为personServiceBean的bean中,这样personServiceBean就不用负责对personDAObean的创建及维护了,这项工作在容器初始化时就已经完成了,配置文件中的property中的name属性指的是id为personServiceBean的bean中有一个setPersonDAO方法。

 

测试类:

package org.spring;

import org.junit.Test;
import org.spring.service.PersonService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
	@Test
	public void test() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"spring.xml");

		PersonService personService = (PersonService) ctx
				.getBean("personServiceBean");
		
		personService.save();

	}
}

 

控制台打印结果如下:

 

工程目录结构图:

 

  • 大小: 20.4 KB
  • 大小: 11.5 KB
  • 大小: 11.5 KB
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics