【我看Spring】IoC映射细节配置
2011-07-25 16:10
309 查看
在上一篇文章《戏说Spring里的【IoC与DI】》中已经把IoC容器和DI的应用概念很形象生动的解析了一遍。IoC这等控制关系在容器与被控元素之间的流转,体现了一种设计的灵活性。我是在最近接触到Spring框架的时候才意识到控制反转这是一个非常有意思的概念、技术,囧。如图,在Spring框架图中,处于Core地位的就是IoC容器,也是Spring的精髓所在。
![](http://hi.csdn.net/attachment/201107/25/0_1311579553KcZv.gif)
秉持手脑结合的方法策略,在头脑中我们对IoC的认识一定要到位,将对象间及内部关系抽离出来统一管理,向Spring中这样Everything is XML ,我们把关系分离出程序主体,也正符合J2EE的核心概念,并能够使得各部件的重用性提高,系统扩展性增强。
正是这样,本着OO思想的一切事物皆对象,我们就能把需求中的各种显隐信息抽象出类,化为实际系统中能够应用的对象,高度的应用抽象,又催生出了众多的应用框架,各式各样的抽象应用,使得开发更加方便快捷、简单易用。试想,长此以往,今后的软件开发又会简化到何等程度呢?
好的,现在还是需要在项目应用中去熟悉理解Sping框架中的核心概念。
本篇先说,在Java Project中如何应用Spring框架中的IoC容器 去分离、管理关系。
1、基础环境搭配:
a) 引入Spring核心包 spring.jar 以及其lib下的相关jar文件 。
b)引入Spring核心配置文件applicationContext.xml
2、在项目中建立基本类:
b)基本的类的调用流程就是ClientàUserManagerImplàUserDao.
不使用IoC容器则Client中代码如下:
此时的Client也可以当做一个管理类关系的容器来看待。那么在配置文件中主要就是配置这里的类间依赖调用关系。
3、相关类代码:
--------------- UserDao.java
--------------- UserDao4MySqlImpl.java
--------------- Client.java
4、applicationContext.xml核心配置:
5、应用Spring框架IoC容器,就这样把关系从UserDao4MySqlImpl和Client中抽离出来统一管理。使得系统更加容易配置、扩展,灵活性大大增强。
在配置中的映射方式有三种,一种是上面代码中涉及到的Setter()属性方式和构造器方式,还有一种接口注入方式。上面就是Spring框架的基本应用,当然在项目中还会有更加复杂的逻辑管理要梳理,要分清楚在Spring中IoC容器管理的一个内部执行顺序。
后面还会有关于AOP 切面编程的相关总结。
![](http://hi.csdn.net/attachment/201107/25/0_1311579553KcZv.gif)
秉持手脑结合的方法策略,在头脑中我们对IoC的认识一定要到位,将对象间及内部关系抽离出来统一管理,向Spring中这样Everything is XML ,我们把关系分离出程序主体,也正符合J2EE的核心概念,并能够使得各部件的重用性提高,系统扩展性增强。
正是这样,本着OO思想的一切事物皆对象,我们就能把需求中的各种显隐信息抽象出类,化为实际系统中能够应用的对象,高度的应用抽象,又催生出了众多的应用框架,各式各样的抽象应用,使得开发更加方便快捷、简单易用。试想,长此以往,今后的软件开发又会简化到何等程度呢?
好的,现在还是需要在项目应用中去熟悉理解Sping框架中的核心概念。
本篇先说,在Java Project中如何应用Spring框架中的IoC容器 去分离、管理关系。
1、基础环境搭配:
a) 引入Spring核心包 spring.jar 以及其lib下的相关jar文件 。
b)引入Spring核心配置文件applicationContext.xml
2、在项目中建立基本类:
Client.java /UserManager.java /UserManagerImpl.java /UserDao.java /UserDao4MySqlImpl.javaa)其中UserManager和UserDao为接口,UserManagerImpl和UserDao4MySqlImpl.java分别为其接口实现
b)基本的类的调用流程就是ClientàUserManagerImplàUserDao.
不使用IoC容器则Client中代码如下:
UserManager userManager = new UserManagerImpl(new UserDao4MySqlImpl()); userManager.addUser("zhangsan_spring", "spring");可以看出,这里边的各类的调用关系是联系很紧密的,同时代码的复用性降低、灵活性降低。
此时的Client也可以当做一个管理类关系的容器来看待。那么在配置文件中主要就是配置这里的类间依赖调用关系。
3、相关类代码:
--------------- UserDao.java
package com.tgb.spring.dao; public interface UserDao { public void addUser(String username,String password); }
--------------- UserDao4MySqlImpl.java
package com.tgb.spring.dao; public class UserDao4MySqlImpl implements UserDao { @Override public void addUser(String username, String password) { System.out.println("UserDao4MySqlImpl.addUser()"); } }--------------- UserManager.java
package com.tgb.spring.manager; public interface UserManager { public void addUser(String username,String password); }--------------- UserManagerImpl.java
package com.tgb.spring.manager; import com.tgb.spring.dao.UserDao; public class UserManagerImpl implements UserManager { private UserDao userDao; public UserManagerImpl(){} //使用构造方法传入userDao,就是避免UserManagerImpl知道我们会使用哪个具体的UserDao //这是一种封装,反转给spring的ioc容器. //主要是可以从applicationContext.xml配置中设置Bean标签的属性, //从而制定UserManagerImpl构造函数中的参数为何,这样就进行了高度解耦,灵活性变强。 // public UserManagerImpl(UserDao userDao) { // this.userDao = userDao; // } // public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void addUser(String username, String password) { //UserDao userDao = new UserDao4MySqlImpl(); //由我们的应用程序 负责 服务(对象)定位. userDao.addUser(username, password); } }
--------------- Client.java
package com.tgb.spring.client; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.tgb.spring.manager.UserManager; public class Client { public static void main(String[] args){ //由我们的应用程序负责服务(对象)定位 //UserManager userManager = new UserManagerImpl(new UserDao4MySqlImpl()); //userManager.addUser("zhangsan_spring", "spring"); BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); //这里的getBean("userManager") 通过从applicationContext.xml文件中读取查找“userManager” 继而生成一个实例并将其返回 UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser("zhangsi", "password"); } }
4、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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- 在IoC容器中注册UserDao4MySqlImpl类 --> <bean id="userDao4MySql" class="com.tgb.spring.dao.UserDao4MySqlImpl"/> <!--在IoC容器中注册UserManagerImpl类 --> <bean id = "userManager" class="com.tgb.spring.manager.UserManagerImpl"> <!-- 相当于UserManagerImpl 中的构造函数 --> <!-- spring的Ioc容器会根据此进行对象创建 ,返回给UserManagerImpl的构造方法中作为参数userDao--> <!-- <constructor-arg ref="userDao4MySql"/>--> <!-- 这里使用property 参数,是因为在UserManagerImpl中没有 使用构造器方式,--> <!-- 而是使用了setUserDao() 的方式来做的。--> <property name="userDao" ref="userDao4MySql"/> </bean> </beans>
5、应用Spring框架IoC容器,就这样把关系从UserDao4MySqlImpl和Client中抽离出来统一管理。使得系统更加容易配置、扩展,灵活性大大增强。
在配置中的映射方式有三种,一种是上面代码中涉及到的Setter()属性方式和构造器方式,还有一种接口注入方式。上面就是Spring框架的基本应用,当然在项目中还会有更加复杂的逻辑管理要梳理,要分清楚在Spring中IoC容器管理的一个内部执行顺序。
后面还会有关于AOP 切面编程的相关总结。
相关文章推荐
- 【我看Spring】IoC映射细节配置
- spring_1-4,IOC&DI概述_配置 Bean_属性配置细节
- spring学习总结(四):IOC & DI 配置 Bean 之注入属性细节
- Spring、MyBatis的整合数据映射器类(UserMapper->iocContext.xml)配置文件详解
- Spring基础---配置文件、Ioc、AOP
- Spring IOC的配置使用
- Spring.NET 中配置 ashx 的映射,以及其它各种映射的处理
- Spring学习笔记之属性配置细节
- Spring IOC的配置使用
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
- spring学习基础(ioc底层原理,bean的配置和注解)
- Sprinp-IOC和spring基本配置详解
- 详解Spring Cloud Zuul中路由配置细节
- Spring IOC之基于JAVA的配置
- spring 4 bean配置--注入属性配置细节(2)
- spring配置hibernate映射文件-------通配符
- Spring学习之——依赖关系和配置细节(一)
- Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式
- Spring IOC 之注解配置、单元测试
- Castle IOC容器与Spring.NET配置之比较