Spring里的IOC例子

来源:互联网 发布:js modem 电话 编辑:程序博客网 时间:2024/05/17 21:38

          IOC称为控制反转。反转,也就是把任务交给别人,即IOC容器。关系都自己来维护,如果有很多对象,都自己来做。现在写一工厂,自己来解析文件。现在反转了,这些事你不用做了,交给IOC容器。IOC提供了相应的配置,我们可以把这种依赖关系配制上就可以了。只要把依赖关系配制好就可以了。例如:下面将要说要的,UserManager依赖于UserDaoImpl,这些所有的业务对象,关系都给配制上。那么Spring会自动地把UserDaoImpl给new好,把UserManager给new好,然后调用UserManager构造函数。把自动new好的UserDaoImpl放进去。当然,自动放进去是有前提的,你的UserManager要提供构造函数或UserManager的实现要提供set方法,即setUserDao方法,传送一个userDao过去。它就能调用你的set方法,把new好的UserDao给你,这个给的过程就称为注入,即DI,依赖注入。你主动的找一件东西,你是有依赖关系的,而现在是,它主动的给你,是没有依赖关系的。这就是IOC容器。除了DI实现,还有一种实现是依赖查找。Spring没有侵入性,主要就体现在这里。你提供标准的构造函数,标准的set方法,我就可以把对象new好,设过来。

首先,我们先建一个java项目。

项目里有三个包,如下:

1.package com.test.spring.dao

dao下有两个类,一个是接口UserDao,还有一个是UserDao的实现UserDaoImpl。

package com.test.spring.dao;public interface UserDao {public void save(String username, String password);}
package com.test.spring.dao;public class UserDaoImpl implements UserDao {public void save(String username, String password) {System.out.print("-----------UserDaoImpl.save()--------------");}}

2.package com.test.spring.manager

manager即是业务层,一个是接口UserManager,还有一个是UserManager的实现UserManagerImpl。

package com.test.spring.manager;public interface UserManager {public void save(String username,String password);}

 

package com.test.spring.manager;import com.test.spring.dao.UserDao;public class UserManagerImpl implements UserManager {private UserDao userDao;                                                                                       //public UserManagerImpl(UserDao userDao) {//this.userDao = userDao;//此处用的是构造方法//}public void save(String username, String password) {this.userDao.save(username, password);}                                                                                                                                             public void setUserDao(UserDao userDao{                                                                                                                                              this.userDao=userDao; //一般都用set方法   }

3.package com.test.spring.client

client即客户端。

package com.test.spring.client;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.test.spring.dao.UserDaoImpl;import com.test.spring.manager.UserManager;import com.test.spring.manager.UserManagerImpl;public class Client {public static void main(String[] args) {//UserManager userManager=new UserManagerImpl(new UserDaoImpl());//userManager.save("张三", "123");BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");UserManager userManager = (UserManager)factory.getBean("userManager");userManager.save("张三", "123");}}

 

引入Spring依赖库里的解压好的jar包,三个即可,即:spring.jar、commons-logging.jar、log4j-1.2.14.jar

在src下面,还要建applicationContext.xml和log4j.properties,此处这两个文件可以在Spring的jar包下面直接拷贝过来即可。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   http://www.springframework.org/schema/context          http://www.springframework.org/schema/context/spring-context-2.5.xsd           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd           http://www.springframework.org/schema/tx ">http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">        <!--即处id是唯一的标识-->                                                                                                 <bean id="userDaoImpl" class="com.test.spring.dao.UserDaoImpl" /><bean id="userManager" class="com.test.spring.manager.UserManagerImpl"><constructor-arg ref="userDaoImpl" /></bean></beans>

log4j.properties

log4j.rootLogger=INFO, stdout,logfile                                               log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.file=${project.root}/WEB-INF/petstore.log                                 Loglog4j.appender.logfile.MaxFileSize=512KB                                                        log4j.appender.logfile.MaxBackupIndex=3                                       log4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

 

 

原创粉丝点击