下面的一系列的文章的所有内容主要来源于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 揭秘:全面深入了解Spring》是一本旨在帮助开发者深入理解并熟练掌握Spring框架的权威指南。Spring是Java企业级应用开发中的基石,它以其模块化、易用性和强大的功能深受开发者喜爱。这本书详细阐述了...
通过手写模拟,了解Spring的底层源码启动过程 通过手写模拟,了解扫描逻辑和依赖注入等底层源码工作流程 通过手写模拟,了解初始化机制工作流程 通过手写模拟,了解BeanDefinition、BeanPostProcessor的概念 ...
本教程旨在帮助Java程序员深入了解Spring框架的架构及实际应用,适合以下人群: - **初级到中级水平的Java开发者**:希望通过学习Spring框架提升自己的技能。 - **企业级应用开发者**:希望利用Spring框架构建高...
首先,让我们深入了解Spring Cloud Gateway。这是一个基于Spring Framework 5,Spring Boot 2 和 Project Reactor 的高性能API网关。它提供了动态路由,服务熔断,负载均衡,以及针对微服务的细粒度控制等功能。通过...
一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
在 Spring 中,手写 Spring 框架是一种方式,使得开发者可以深入了解 Spring 框架的内部机理。 Spring 框架提供了多种方式来开发企业级应用程序,使得开发者可以快速和方便地开发和维护应用程序。
了解Spring框架的基本知识后,我们可以深入探讨如何配置和使用Spring的IoC容器、如何编写面向接口的代码并通过依赖注入实现解耦、如何使用AOP进行横切关注点的处理,如日志记录和事务管理。此外,还可以学习Spring ...
下载后可以通过阅读源码来深入了解Spring Cloud的实现原理和技术细节,这对于学习和掌握Spring Cloud的高级用法非常有帮助。通常,学习Spring Cloud源码可以从以下几个方面入手: - **核心类和接口**:了解Spring ...
了解Spring Boot 2如何与其他Spring API,工具和框架集成 访问Spring MVC和新的Spring Web Sockets,以实现更简单的Web开发 使用微服务进行Web服务开发并与Spring Boot应用程序集成 无缝添加持久性和数据层,使您的...
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 Cloud和Spring Boot是两个非常重要的Java开发框架,它们在微服务架构中...通过学习这个案例,开发者能够了解Spring Boot和Spring Cloud的整合过程,掌握微服务架构的基本实践,提升开发效率,并增强系统健壮性。
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
- **数据访问**:了解 Spring 如何整合各种 ORM 和 OXM 框架,以及如何实现数据访问层的事务管理。 通过这些深入的学习,开发者可以更好地利用 Spring 框架来设计和实现高效、可扩展的 Java 应用程序。
通过对这些模块的源码分析,我们可以深入了解Spring如何实现其强大的功能,并能更好地运用到实际项目中,提升代码质量和可维护性。无论是新手还是经验丰富的开发者,理解Spring的源码都将是一次宝贵的进阶之旅。
要想深入了解Spring框架的源码,首先需要搭建Spring框架的开发环境。开发环境主要包括了JDK、Eclipse或IDEA、Maven或Gradle等工具。通过搭建开发环境,我们可以更方便地阅读和调试Spring框架的源码。 1.2.1 源码...
2. **查阅源码**:通过阅读源码,你可以了解Spring内部的实现细节,例如如何处理依赖注入、如何管理bean等。 3. **学习最佳实践**:通过对源码的学习,可以了解到Spring推荐的设计模式和最佳实践,提升自己的编程...
2. Spring的模块结构:了解Spring的主要模块,如Core Container、Data Access/Integration、Web、AOP、Instruments等。 二、IoC(控制反转) 1. 依赖注入原理:深入理解依赖注入的概念,它是如何解决对象之间的耦合...
虽然这里没有提供Spring Boot的源码,但了解Spring框架的源码可以帮助你更好地理解Spring Boot的工作机制。 总之,通过研究Spring框架5.2.9.RELEASE的源码,开发者可以深入了解其设计理念,学习如何实现高级特性,...
- 了解 Spring Cloud 的发展历程和核心组件。 - 学习 Spring Boot 的基本概念和优势,它是 Spring Cloud 的基础。 - 掌握创建第一个 Spring Cloud 项目的步骤。 2. **Eureka 服务注册与发现**: - Eureka 作为...