Spring里的IOC例子

          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.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.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.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值