Spring学习笔记 1 --Spring 是什么
2016-12-04 14:14
260 查看
Spring 是什么
Spring 是一个开源的控制反转和面向切面的容器框架,它的主要目的是简化企业开发。控制反转:
应用本身不负责依赖对象的创建和维护,依赖对象和维护交给外部容器负责, 也就是胡说空之权转移给了外部容器, 这个就是所谓的反转。
依赖注入:
在运行期, 由外部容器动态的将依赖对象注入到组件
为什么要使用Spring
1)降低组件之间的耦合度,实现软件各层之间的解耦
控制层 -》 服务层-》 DAO层 各个层次独立,实现解耦
2)可以使用容器提供的很多服务,如事物管理,消息服务等等, 当我们使用容器事物管理时,开发人员不再需要手动控制事物,也不需要处理复杂的事物传播。
3)容器提供单例模式支持,开发人员不需要自己编写实现代码
4) 容器提供了AOP技术,利用他可以实现权限拦截和运行期代码监控等功能。
5) 容器提供发很多辅助类, 可以利用这些类快速开发 JdbcTemplate ,Hibernate Template
6) Spring 对于主流的应用框架提供了继承支持, 如:集成Hiberate,JPA Structs 等,这样便于应用的开发
看下列代码,不能实现事物:
public void payment(){
Bean1.update(conn);
Bean2.save(conn);
}
Public class Bean1{
public void update(Connection conn){
Connection conn = null;
conn.setAutoCommit(false);
Statement.executeUpdate("update account set account=? where id =?");
}
}
Public class Bean2{
public void save(Connection conn){
Connection conn = null;
conn.setAutoCommit(false);
Statement.executeUpdate("insert into account(content) value id =?");
}
}
如果想实现事物,必须对代码进行改动:
public void payment(){
Connection conn = null;
conn.setAutoCommit(false);
Bean1.update(conn);
Bean2.save(conn);
/.... 提交或者回滚事物,主要是因为一个coon的生命周期觉得
}
Public class Bean1{
public void update(Connection conn){
Statement.executeUpdate("update account set account=? where id =?");
}
}
Public class Bean2{
public void save(Connection conn){
Statement.executeUpdate("insert into account(content) value id =?");
}
}
但是如果使用Spring 就可以通过声明式的事物属性配可以轻松的实现事物需求
如果要实现bean1.update() bean2.save() 在同一个事物中执行,那么Spring中做如下配置:
@Transational(propagation=Propagation.Required)
public void payment(){
Bean1.update(conn);
Bean2.save(conn);
/.... 提交或者回滚事物,主要是因为一个coon的生命周期觉得
}
Public class Bean1{
@Transational(propagation=Propagation.Required)
public void update(Connection conn){
Statement.executeUpdate("update account set account=? where id =?");
}
}
Public class Bean2{
@Transational(propagation=Propagation.Required)
public void save(Connection conn){
Statement.executeUpdate("insert into account(content) value id =?");
}
}
如果想不管Bean1.update() 是否成功,都需要bean2.save 成功
可以做如下配置:
@Transational(propagation=Propagation.Required)
public void payment(){
Bean1.update(conn);
Bean2.save(conn);
/.... 提交或者回滚事物,主要是因为一个coon的生命周期觉得
}
Public class Bean1{
@Transational(propagation=Propagation.Required)
public void update(Connection conn){
Statement.executeUpdate("update account set account=? where id =?");
}
}
Public class Bean2{
@Transational(propagation=Propagation.RequiresNew)
public void save(Connection conn){
Statement.executeUpdate("insert into account(content) value (?)");
}
}
如何区分容器的轻量级还是重量级关键在于容器提供的服务多少,多重量级,少,轻量级。
例如EJB 容器 提供了EJB所有的功能,它属于重量级框架。
相关文章推荐
- spring学习笔记--什么是spring?
- (引)spring学习笔记1.什么是控制反转
- spring学习笔记①spring出现为了解决什么问题?
- Spring学习笔记 什么是AOP
- 2017年1月21日学习笔记 Spring是什么?
- Spring学习笔记 什么是AOP
- Spring.Net学习笔记(1)--IoC干什么的?
- Spring学习笔记(一)
- Spring in Action 学习笔记—第一章 开始Spring之旅
- 委托与事件学习笔记1---什么是委托?
- [设计模式学习笔记之一]面向对象是什么?
- [设计模式学习笔记之一]面向对象是什么?
- Spring学习笔记一
- Spring学习笔记:第二章 Spring中IoC的入门实例
- Spring学习笔记:1、概念理解
- 委托与事件学习笔记1---什么是委托?
- ★(转)Spring学习笔记1
- Spring学习笔记
- Velocity学习笔记2——Velocity能够做什么
- Spring in Action 学习笔记—第一章 开始Spring之旅(转贴)