通过上篇文章的介绍我们已经了解了一部分原因关于为什么要使用Spring,接下来我们将通过一个例子来了解Spring是如何运行的.
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、提供spring配置文件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">
</beans>
3、提供log4j.properties配置文件,放在classpath能够找到的地方.
4、在UserManager中提供构造函数,让spring将UserDao实现注入(DI)过来
package com.tgb.spring.manger;
import com.tgb.spring.dao.UserDao;
import com.tgb.spring.dao.UserDaoMysqlImpl;
/**
*
* @title UserManager 通过Spring注入实现
* @project_name spring_why_spring
* @author jnqqls
* @group TGB
* @version 1.0
* @comments
*/
public class UserManagerImpl implements UserManager {
// 因为UserDao为没有状态的类,所以可以定义为成员变量
private UserDao userDao;
/**
* 可以通过构造方法赋值
*
* @param userDao
*/
public UserManagerImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void addUser(String username, String password) {
userDao.addUser(username, password);
}
}
5、让spring管理我们对象的创建和依赖,必须将依赖关系配置到spring的核心配置文件中
<?xml version="1.0" encoding="UTF-8"?>
<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="http://www.springframework.org/schema/beans"
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" >
<bean
id="userDao4Mysql"
class="com.tgb.spring.dao.UserDaoMysqlImpl" />
<bean
id="userDao4Oracle"
class="com.tgb.spring.dao.UserDaoOracleImpl" />
<bean
id="userManager"
class="com.tgb.spring.manger.UserManager" >
<!-- 描述依赖关系 UserManager 依赖MySql的实现,会先找到UserDaoMysqlImpl,然后New好对象,随后将对象注入到构造函数中.-->
<!-- 你找女朋友和女朋友找你是不一样的 -->
<constructor-arg ref="userDao4Mysql"></constructor-arg>
</bean>
</beans>
6、编写客户端
package com.tgb.spring.client;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tgb.spring.dao.UserDaoMysqlImpl;
import com.tgb.spring.manger.UserManager;
import com.tgb.spring.manger.UserManagerImpl;
/**
*
* @title Spring实例客户端
* @project_name spring_why_spring
* @author jnqqls
* @group TGB
* @version 1.0
* @comments
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// 请求IOC容器,读取配置文件,根据配置文件创建UserManager对象
BeanFactory beanFactory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
// 获取UserManager的对象,不用去管UserDao因为在Spring中已经对关系进行管理
UserManager userManager = (UserManager) beanFactory
.getBean("userManager");
userManager.addUser("jnqqls", "123456");
}
}
以上便是Spring的实例,核心内容是第4步,第5步,通过依赖注入和Spring的配置文件来达到不需要主动查找对象,对象的查找,定位和创建全部由容器管理.
Spring 小结:
鼓励我们面向接口编程,能够大量减少Factory和Singleton的数量.这样代码的层次会更清楚,只是业务对象之间的关系,程序员可以更加注重对业务的精力.主要原因是我们不再查找,定位,创建和管理对象之间的关系,都交给IOC来管理.减少了代码中的耦合(解耦合),将耦合推迟到了配置文件中,发生了变化也更容易控制.
分享到:
相关推荐
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
Spring事务管理Demo
基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)...
2、本工程,模拟实现Spring的IOC,将xml中配置的Bean读入到Spring容器中,并在测试用例中调用Spring容器中的bean。 3、开发环境eclipse,jdk1.6。使用第三方jar包有:jdom.jar(用于解析xml文件),junit-4.4.jar...
国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码...
【SSH进阶之路】一步步重构容器实现Spring框架——从一个简单的容器开始(八) 【SSH进阶之路】一步步重构容器实现Spring框架——解决容器对组件的“侵入式”管理的两种方案--服务定位器和IoC容器(九) 【SSH进阶之路】...
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合
基于spring+spring mvc+mybatis框架整合实现超市货物管理系统(实现登入功能、mysql数据库的增删改查及分页显示)
│ 05 自动配置:如何正确理解 Spring Boot 自动配置实现原理?.mp4 │ 06 基础规范:如何理解 JDBC 关系型数据库访问规范?.mp4 │ 07 数据访问:如何使用 JdbcTemplate 访问关系型数据库?.mp4 │ 13 服务调用...
Spring+Spring MVC+Spring JDBC+MySql实现简单登录注册
自己实现spring-session,实现单点登陆的功能 使用filter拦截用户的请求,在filter中包装request,在request的包装类requestWrapper中,重写getSession(), 和getSession(boolean create)。自己实现httpSession,...
Spring源代码解析(一):Spring中的事务处理 Spring源代码解析(二):ioc容器在Web容器中的启动 Spring源代码分析(三):Spring JDBC Spring源代码解析(四):Spring ...Spring源代码解析(十):Spring Acegi框架授权的实现
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
使用spring 实现的两种定时任务,使用eclipse直接导入就可使用
国内第一本基于spring3.0的著作,从源代码的角度对spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透spring框架的优秀架构和设计思想,而且还能从spring优雅的实现源码...
模仿实现spring , 告诉你如何用反射技术实现spring 看后绝对获益匪浅
使用Spring的注解方式实现AOP的细节
我们在开发过程中经常会发生spring注入错误或失败的情况,其实Web服务器端在Action、dao、service包之内是很容易实现的,在这些包之外实现spring注入就不容易了,总是出错,其实根本原因是无法获得相应的spring上...
SpringCloud基于分布式的租售一体电商平台的设计与实现 SpringCloud基于分布式的租售一体电商平台的设计与实现 SpringCloud基于分布式的租售一体电商平台的设计与实现 SpringCloud基于分布式的租售一体电商平台的...
php的spring 实现webservice 实例