SSH——Spring控制反转

 一、 spring核心

1、Ioc控制反转

IoC(Inversion of Control):本来是由应用程序管理的对象之间的依赖关系,现在交给了容器管理,这就叫控制反转,即交给了IoC容器,Spring的IoC容器主要使用DI方式实现的。不需要主动查找,对象的查找、定位和创建全部由容器管理

简单的举个例子,帮助大家理解什么是控制反转:

我们编码经常new,类实例化、new出一个对象;业务层调用Dao层一个类的添加方法,怎么做?New出dao层的一个实例,在通过该实例调用添加方法。这样的做法很常见,但它存在什么问题?说是解耦,但业务与数据层通过这种直接调用的方式实例化,使得两层耦合度照样高,如果我不需要调用添加方法了,或者我要在调一个验证数据的方法,那就不得不打开业务层代码,改改改!

控制反转的出现,将调用关系由原来的程序主动查找需要的对象、方法定位,优化为通过配置,将类的属性、方法均配置到xml文件中,一创建Bean对象,该对象以及它存在set方法的类、属性也一并主动创建出来,供程序使用。

所以这种对象间依赖调用关系由原来的程序管理变成自动管理,而提供这个自动管理的地方就是容器,容器实质也就是一个提供服务的场所,原来没有,放到一个空间(容器)里,便享有该空间所提供的服务。在这里,这种服务便是通过配置主动创建出对象间关系。

而spring的容器--即Ioc容器主要是通过依赖注入来实现的。

二、创建一个完整的spring demo

1、spring的依赖包配置

* SPRING_HOME/dist/spring.jar

* SPRING_HOME/lib/log4j/log4j-1.2.14.jar

* SPRING_HOME/lib/jakarta-commons/commons-logging.jar

2、提供配置文件

*applicationContext.xml

*log4j.properties

3、创建dao 添加方法\Manager业务

public class UserManagerImpl implements UserManager {
	
	private UserDao userDao;//在业务实现层注入dao,并提供set方法。依赖注入

	public void addUser(String username, String password) {
		userDao.addUser(username, password);
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
}

4、配置xml

  <bean id="userDao4Mysql" class="com.bjpowernode.spring.dao.UserDao4MySqlImpl"/>
  
  <bean id="usrDao4Oracle" class="com.bjpowernode.spring.dao.UserDao4OracleImpl"/>
  
  <bean id="userManager" class="com.bjpowernode.spring.manager.UserManagerImpl">
  	<!-- userManager层通过构造函数注入dao,则使用构造函数对应标签进行配置
   	<constructor-arg ref="userDao4Mysql"/>
   	 -->
   	<!--  
   	<constructor-arg ref="usrDao4Oracle"/>
   	 userManager层通过提供set方法注入dao,则使用property标签进行配置-->
   	 <property name="userDao" ref="usrDao4Oracle"/>
  </bean>

5、编写客户端,读取xml文件,获得bean id,创建bean对象

public class Client {

	public static void main(String[] args) {
		//创建BeanFactory ,读取spring 配置文件
		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		//getBean(配置文件中bean id),创建userManager bean,即创建userManager类
		UserManager userManager = (UserManager)factory.getBean("userManager");
				
		userManager.addUser("Max", "123");
	}
}
通过以上demo,客户端一执行便可调用dao层addUser方法,这就是spring中控制反转的实现,在业务层注入dao,同时配置好,再创建BeanFactory获得该bean id,创建出bean对象,也就是业务层userManager对象,调用add,便可通过set方法,创建出dao实例,执行真正的add。如果需要修改,则直接改配置中,注入dao的标签class即可,代码逻辑完全不用动。是不是很强~


 

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值