Spring--开源的控制反转(Inversion of Control,IoC)和面向切面(AOP)的
容器框架.
一.IOC 控制反转
public class PersonServiceBean
{
private PersonDao personDao = new PersonDaoBean();
public void save(Person person)
{
personDao.save(person);
}
}
PersonDaoBean 本来是在应用内部创建及维护的。而所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建和维护是由外部容器负责的。这样控制权就转移到了外部容器,控制权的转移就是所谓的反转。
二.依赖注入(Dependency Injection)
当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean类就可以改成:
public class PersonServiceBean
{
private PersonDao personDao;
//通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以通过setter 的方法进行注入
public PersonServiceBean(PersonDao person)
{
this.personDao = person;
}
public void save(Person person)
{
personDao.save(person);
}
}
所谓依赖注入就是指:在运行期间,由外部容器动态的将依赖对象注入到组件中。
三.Spring 的好处:
1.降低组件之间的耦合度,实现软件各层之间的解耦。
Controller --> Service --> Dao
2.可以使用容器提供的众多服务,如:事务管理服务,消息服务等等。当我们使用容器管理服务时,开发人员就不需要手工控制事务,也不需要处理复杂的事务传播了。
3.容器提供单例模式支持,开发人员不再需要自己编写实现代码。
4.容器提供AOP技术,利用它很容易实现如权限拦截,运行期监控等功能。
5.容器提供众多辅助类,使用这些类可以提高开发速度,如:JdbcTemplate,HibernateTemplate.
6.Spring 对于主流的应用框架提供了集成支持,如:Hibernate,JPA,Struts等。
四.使用Spring 管理事务
1.Hibernate 事务操作:
public void save()
{
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Info info = new Info("XXX");
info.setContent("内容");
session.save(info);
session.getTransaction().commit();
}
2.JDBC 事务操作:
Connection conn = null;
try{
.......
Statament stmt = conn.createStatement();
stmt.executeUpdate("update person where name='xx'");
conn.commit();
.......
}catch(Exception e)
{
......
}
=====================================
2.如果不使用Spring完成下面两个需求代码如下:
第一种:要求Bean1和Bean2 在同一个事务中执行。
修改两个Bean 代码如下:
public void payment()
{
Connection conn = null;
conn.setAutoCommit(false);
Bean1.update(conn); //更新金额
Bean2.save(conn); //记录操作日志
}
public class Bean1
{
public void update(Connection conn)
{
Statement.executeUpdate(update account set amount = ? where id=?);
}
}
public class Bean2
{
public void save(Connection conn)
{
Statement.executeUpdate("insert into Log (content) values (?)");
}
}
第二种:要求不管Bean1的update()是否成功,都要记录操作日志。
public void payment()
{
Bean1.update(); //更新金额
Bean2.save(); //记录操作日志
}
public class Bean1
{
public void update()
{
Connection conn = null;
conn.setAutoCommit(false);
Statement.executeUpdate(update account set amount = ? where id=?);
}
}
public class Bean2
{
public void save()
{
Connection conn = null;
conn.setAutoCommit(false);
Statement.executeUpdate("insert into Log (content) values (?)");
}
}
3.如果使用Spring,我们只需要通过申明式的事务属性配置就可以轻松地实现这两种业务需求。
第一种:要求Bean1和Bean2 在同一个事务中执行。
@Transactional(propagation=propagation.Required)
public void payment()
{
Bean1.update(); //更新金额
Bean2.save(); //记录日志
}
public class Bean1
{
@Transational(propagation = Propagation.Required)
public void update()
{
executeUpdate("update account set amount=? where id=?");
}
}
public class Bean2
{
@Transational(propagation = Propagation.Required)
public void save()
{
executeUpdate("insert into Log(content) values(?)");
}
}
第二种:要求不管Bean1.update()的事务是否成功,都需要记录日志。
@Transactional(propagation=propagation.Required)
public void payment()
{
Bean1.update(); //更新金额
Bean2.save(); //记录日志
}
public class Bean1
{
@Transational(propagation = Propagation.Required)
public void update()
{
executeUpdate("update account set amount=? where id=?");
}
}
public class Bean2
{
@Transational(propagation = Propagation.RequiresNew)
public void save()
{
executeUpdate("insert into Log(content) values(?)");
}
}
分享到:
相关推荐
1. **Spring全面阐释**:Spring框架是一个开源的Java平台,它为构建应用程序提供了全面的支持。它不仅涵盖了依赖注入(DI)和面向切面编程(AOP),还提供了一个用于处理事务、数据访问、Web应用、安全性和集成的...
通过"01_传智播客Spring2.5视频教程_全面阐释Spring及其各项功能",你将有机会深入学习上述所有概念,并通过实例来巩固理解。这个教程应该涵盖了从基础到高级的多个层次,帮助你从零开始掌握Spring框架,并逐步成长...
1. **全面阐释Spring及其功能** - Spring是一个开源的IoC和AOP框架,它通过提供容器管理和依赖注入来减少组件间的耦合。 - IoC使应用程序不再负责对象的创建和管理,而是由Spring容器负责,降低了组件间的依赖。 ...
在《01_JPA详解_全面阐释和精彩总结JPA》中,我们可能会深入探讨以下几个关键知识点: 1. **JPA概述**:介绍JPA的基本概念,其设计目标以及如何在Java项目中引入JPA,包括依赖管理和配置。 2. **实体(Entity)**...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA用于整合现有的ORM技术,第1讲 全面阐释和精彩总结JPA
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。...在“01_传智播客JPA详解_全面阐释和精彩总结JPA”这个资源中,你将找到关于JPA的深入讲解和实用技巧,帮助你全面掌握这一技术。
### 全面阐释和精彩总结JPA:Java Persistence API的核心理念与实践 #### JPA:Java持久化的统一标准 JPA(Java Persistence API),作为Sun官方提出的Java持久化规范,其核心目标在于简化并标准化Java应用程序中...
这份压缩包包含了一个名为“书法的形态与阐释.pdf”的文件,我们可以从以下几个关键知识点来展开讨论。 1. **书法基本形态**:书法的基本形态包括笔画、结构、布局和章法。笔画是构成汉字的基本元素,如点、横、竖...
1. 中国古代文论的现代转化:中国古代文论现代转化是指将传统文学理论的概念、范畴和方法适应现代社会和学术环境,使其在当代文化语境中具有新的解释力和应用价值。这一过程不仅涉及观念认识,更是一个学术实践层面...
《乔治·斯坦纳及其翻译阐释运作汇编》是关于翻译阐释学的重要研究,作者乔治·斯坦纳是一位在文学、语言和哲学领域具有深远影响力的学者。本文将深入探讨斯坦纳的观点,特别是他在翻译阐释学中的贡献。 翻译阐释学...
1. **古代文论现代转化的学术价值**:中国古代文论现代转化的学术价值在于,它能够使传统文化在现代社会中焕发新的生命力,推动文学理论研究的深入,促进不同学科之间的交流与融合。通过对传统文论的现代阐释,可以...
·全面阐释C++基本概念和技术。与传统的C++教材相比,《C++程序设计原理与实践》对基本概念和技术的介绍更为深入,为你编写实用、正确、易维护和有效的代码打下坚实的基础。 ·强调现代C++编程风格。从开篇就介绍...
总之,一个完整的毕业设计论文作品阐释模板应当包含所有这些元素,以全面、准确地呈现研究过程和成果,体现学生的专业素养和学术能力。遵循这样的模板,学生能够更有效地组织和呈现他们的毕业设计,为他们的学术生涯...
1. **下载光标文件**:首先,你需要找到包含"阐释者"光标样式的压缩包文件,并将其下载到本地计算机。通常,这些文件的扩展名为`.cur`或`.ani`,分别代表静态和动态光标。 2. **解压文件**:使用解压缩软件(如...
"Excel回归分析结果的详细阐释" Excel回归分析结果的详细阐释利用Excel的数据分析进行回归,可以得到一系列的统计参量。下面以连续10年积雪深度和灌溉面积序列(图1)为例给予详细的说明。 图1连续10年的最大积雪...
【乡村原创短视频与身体文化阐释】 乡村原创短视频在当今社会中扮演了重要角色,尤其在快手APP这样的平台上,乡村居民通过自我表达和创新,展示了丰富多样的乡村生活和文化。这种现象受到技术进步、商业推广和个体...
电影塔洛现代性阐释.doc
本文从人工智能时代劳动法所面临的挑战和问题出发,对劳动法的经济功能进行阐释,并提出了规范调整的建议。 首先,文章指出,在人工智能的冲击下,劳动法面临旧问题和新挑战。传统的劳动法在应对人工智能带来的劳动...