下面的一系列的文章的所有内容主要来源于Spring2.5 Reference和传智播客Spring视频,文章中所有的例子都是基于Spring2.5学习和测试的。
Spring是一个开源的控制反转(Inversion of Control,IoC)和面向切面(AOP)的容器框架。它的主要目的是简化企业开发。
一。容器(Container)
容器可以管理对象的生成、资源取得、销毁等生命周期,甚至建立对象与对象之间的依赖关系。Spring提供了容器功能,您可以使用一个配置文件(通常是XML),在当中确定对象名称、确定如何产生对象(Prototype方式或Singleton方式)。在启动容器之后,所有的对象都可以直接取用,不用再编写任何一行代码来产生对象,或是建立对象与对象之间的依赖关系。具体从Java的角度来说,容器就是一个Java所编写的程序,原先必须自行编写程序以管理对象,现在容器会自动帮你做好这一切。
二.控制反转(Inversion of Control,IoC)
public class CustomerMgrServiceBean{
private CustomerDao customerDao = new CustomerDaoImpl();
public void save(Customer customer){
customerDao.save(customer);
}
}
如上所示代码,CustomerDaoImpl是在应用程序内部创建及维护的。而所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器负责。这样控制权就由应用程序转移到了外部容器,控制权的转移就是所谓反转。当我们把依赖对象交给外部容器负责创建时,那么上面的CustomerMgrServiceBean类可以改成如下所示:
public class CustomerMgrServiceBean{
private CustomerDao customerDao ;
public CustomerMgrServiceBean(CustomerDao customerDao){
this.customerDao = customerDao;
}
public void save(Customer customer){
customerDao.save(customer);
}
}
上面的代码是通过构造器参数,让容器将创建好的依赖对象CustomerDaoImpl注入进CustomerMgrServiceBean,当然也可以使用setter方法进行注入。所谓依赖注入(Dependency Injection)就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。
三.使用Spring的好处
1。降低组件之间的耦合度,实现软件各层之间的解耦。
2。可以使用容器提供的众多的服务,如:事务管理服务,消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需要处理复杂的事务传播。
3。容器提供单例模式支持,开发人员不再需要自己编写实现代码。
4。容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
5。容器提供了众多的辅助类,使用这些类能够加快应用的开发,如:JdbcTemplate,HibernateTemplate.
6。Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样便于应用的开发。
如果不用Spring的事务管理,对于下面的需求,Bean1和Bean2已经写好:
public void payment(){
Bean1.update();//更新金额
Bean2.save(); //记录操作日志
}
如果我们不使用Spring,针对下面这两种业务需求,我们该如何做?
第1种可能的业务需求:要求Bean1.update()和Bean2.save()在同一个事务中执行。
第2种可能的业务需求:要求Bean1.update()的事务是否成功,都要记录操作日志
public class Bean1{
public void update(){
//中间省略了很多代码,只是表达意思
Connection conn = null;
conn.setAutoCommit(false);
Statement.executeUpdate("update aaccount set amount=? where id=?");
}
}
public void save(){
//中间省略了很多代码,只是表达意思
Connection conn = null;
conn.setAutoCommit(false);
Statement.executeUpdate("insert into Log(content) values(?)");
}
}
在不修改原来代码的情况下,是不能实现需求的功能的。可能要将代码修改成如下所示,实现第一种需求,但想实现第二种需求就更复杂了:
public void payment(){ C
Connection conn = null;
conn.setAutoCommit(false);
Bean1.update(conn);//更新金额
Bean2.save(conn); //记录操作日志
....
}
public class Bean1{
public void update(Connection conn){
//中间省略了很多代码,只是表达意思
Statement.executeUpdate("update aaccount set amount=? where id=?");
}
public class Bean2{
public void save(Connection conn){
//中间省略了很多代码,只是表达意思
Statement.executeUpdate("insert into Log(content) values(?)");
}
}
如果使用Spring,我们只需要通过声明式的事务属性配置就可以轻松的实现这两种业务需求:
1:要求Bean1.update()和Bean2.save()在同一个事务中执行。
2:要求Bean1.update()的事务是否成功,都要记录操作日志。如下所示:
@Transactional(propagation=Propagation.Required)
public void payment(){
Bean1.update();//更新金额
Bean2.save(); //记录操作日志
}
public class Bean1{
@Transactional(propagation=Propagation.Required)
public void update(Connection conn){
Statement.executeUpdate("update aaccount set amount=? where id=?");
}
}
public class Bean2{
@Transactional(propagation=Propagation.RequiresNew)
public void save(Connection conn){
Statement.executeUpdate("insert into Log(content) values(?)");
}
}
四。Spring到底应该是轻量级框架还是重量级框架
其实划分一个应用是属于轻量级还是重量级,主要应该看它使用了多少服务。
对于Spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,当应用需要某种服务,还需要指明使用该服务,如果应用使用的服务很少,如:只使用了Spring的核心服务,那么我们认为此时应用属于轻量级的,如果应用使用了Spring提供的大部分服务,这时就应该把它划入重量级。目前EJB容器就因为默认为应用提供了EJB规范中所有的功能,所以它应该划入重量级。
五。Spring需要的jar包
使用Spring需要的jar包:
dist\spring.jar
lib\jakarta-commons\commons-logging.jar
如果使用了切面编程(AOP),还需要下列jar文件
lib/aspectj/aspectjweaver.jar和aspectjrt.jar
lib/cglib/cblib-nodep-2.1_3.jar
如果使用了JSR-250中的注解,如@Resource/@PostConstruct,还需要下列的jar文件 lib/j2ee/common-annotations.jar
六。解决编写spring配置文件时,不能出现帮助信息的问题
由于spring的schema文件位于网络上,如果机器不能连接到网络,
那么在编写配置信息的时候就无法出现提示信息,解决方法有两种:
1。让机器上网,eclipse会自动从网络上下载schema文件并缓存在硬盘上。
2。手动添加schema文件,方法如下:
windows->preferences->myeclipse->files and editors->xml->xmlcatalog,点"add",在出现的窗口中的Key Type中选择URI,在location中选"File system",然后在spring解压目录的dist/resources目录中选择spring-beans-2.5.xsd,回到设置窗口的时候不要急着关闭窗口,应把窗口中的Key Type改为Schema location ,Key改为http://www.springframework.org/schema/beans/spring-beans-2.5.xsd。
分享到:
相关推荐
通过手写模拟,了解Spring的底层源码启动过程 通过手写模拟,了解扫描逻辑和依赖注入等底层源码工作流程 通过手写模拟,了解初始化机制工作流程 通过手写模拟,了解BeanDefinition、BeanPostProcessor的概念 ...
Spring 开发的必备良师益友 帮您洞穿Spring
一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
1.了解Spring 2.了解NoSQL和文档数据库 3.要求 4.其他帮助资源 4.1。支持 4.1.1。社区论坛 4.1.2。专业支持 4.2。发展之后 5.新&值得注意的 5.1。Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0...
基于Spring Cloud微服务化电商平台,每个模块单独封装,如有某个模块不能满足业务,可以单独进行改造,无需关心其他模块功能, 各个模块之间通过Fegin调用,多业务系统并行开发,可以用来学习了解Spring Cloud各个...
了解Spring Boot 2如何与其他Spring API,工具和框架集成 访问Spring MVC和新的Spring Web Sockets,以实现更简单的Web开发 使用微服务进行Web服务开发并与Spring Boot应用程序集成 无缝添加持久性和数据层,使您的...
刚开始学Spring,今天做了Struts和Spring结合的例题 Struts和Spring做的快速开发的小例子,另外加上了例题文档做解释,适合初学者学习
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
Spring : 春天 —>给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形...你是否不了解spring,到底是什么,一张图完美诠释了spring的组成,优点,代理设计模式,面向切面编程,事务,整合mybatis等等。
3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二.实验内容 (1)使用Spring JDBC实现书店的购书过程,即有如下一个BookShopDao接口...
Spring Framework简介:了解Spring框架的核心理念,包括依赖注入(DI)和面向切面编程(AOP)。 Spring Boot:熟悉Spring Boot,知道如何创建和管理Spring Boot项目,以及如何使用Spring Boot的自动配置功能。 ...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring和的实现原理,第三部分讲述了ACEGI安全框架、DM模块以及Flex...
还解密了设计这两个框架时的许多决策内幕、所应用的设计模式和面向对象技术,使读者能够更深入地了解Spring。并在自己的项目中运用这些专家技术,全面提升自己的Web开发境界。 《深入解析Spring MVCgn Web Flow》由...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
spring揭秘,了解spring内在运行逻辑
第1章-SimpleSpringApplication 在基本了解Spring框架之后,我们可以创建一个简单的Spring Application示例。 欢迎来到Chapter1-SimpleSpringApplication Wiki! 在基本了解Spring框架之后,我们可以创建一个简单的...
一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
认识 Spring 来认识 Spring 的一些特性,并初步了解一下什么叫作 IoC?什么叫作 DI? 简介 Spring Inversion of Control Dependency Injection <br> 核心容器 Spring 核心容器实作...
Spring大师班-从初学者到专家的旅程 了解Spring Framework的魔力。 从IOC(控制反转),DI(依赖项注入),应用程序上下文到Spring Boot,AOP,JDBC和JPA的世界。 为难忘的旅程做好准备。介绍今天的Spring Framework...