Spring 是一个轻量级容器(Container), 只要由IOC 和 AOP组成; 又叫控制反转和面向切面
Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现
Spring Aspects:Spring提供的对AspectJ框架的整合
Spring Beans:Spring IOC的基础实现,包含访问配置文件、创建和管理bean等。
Spring Context:在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。
Spring Context Support:Spring context的扩展支持,用于MVC方面。
Spring Core:Spring的核心工具包
Spring expression:Spring表达式语言
Spring Framework Bom:浏览对象支持
Spring Instrument:Spring对服务器的代理接口
Spring Instrument Tomcat:Spring对tomcat连接池的集成
Spring JDBC:对JDBC 的简单封装
Spring JMS:为简化jms api的使用而做的简单封装
Spring Messaging:集成messaging api和消息协议提供支持
Spring orm:整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现
Spring oxm:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换
Spring test:对JUNIT等测试框架的简单封装
Spring tx:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。
Spring web:包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
webmvc:包含SpringMVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。
Spring webmvc portlet:Spring MVC的增强
实例化(Instantiation) ---- 属性赋值(Populate) ---- 初始化(Initialization) ---- 销毁(Destruction)
ApplicationContext 是 BeanFactory 的子类, 因此他继承了 HierarchicalBeanFactory 和 ListableBeanFactory 等接口
从 ApplicationContext 还衍生出很多 Context:
AOP 称为面向切面编程;AOP包括核心关注点和横切关注点
核心关注点: 核心关注点指的是业务相关的关注点 横切关注点: 包括 权限认证、日志、事物等
如果是 interface相关 就会使用JDK,如果是其他就会使用CGLIB (全称: Code Generation Library)
事务 Transaction 保证有 Acid特性,即 Atomicity, Consistency, Isolation 和 Durability
只局限于当前事务资源,不支持多 datasource的 分布式事务
public void transferAccount () {
Connection conn = null;
Statement stmt = null;
try{
conn = getDataSource().getConnection();
// 将自动提交设置为 false,若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交
conn.setAutoCommit(false);
stmt = conn.createStatement();
// 将 A 账户中的金额减少 500
stmt.execute("update t_account set amount = amount - 500 where account_id = 'A'");
// 将 B 账户中的金额增加 500
stmt.execute("update t_account set amount = amount + 500 where account_id = 'B'");
// 提交事务
conn.commit();
// 事务提交:转账的两步操作同时成功
} catch(SQLException sqle){
// 发生异常,回滚在本事务中的操做
conn.rollback();
// 事务回滚:转账的两步操作完全撤销
stmt.close();
conn.close();
}
}
拥有 Transaction Manager 支持多个 datasource
public void transferAccount() {
UserTransaction userTx = null;
Connection connA = null; Statement stmtA = null;
Connection connB = null; Statement stmtB = null;
try{
// 获得 Transaction 管理对象
userTx = (UserTransaction)getContext().lookup("java:comp/UserTransaction");
connA = getDataSourceA().getConnection();// 从数据库 A 中取得数据库连接
connB = getDataSourceB().getConnection();// 从数据库 B 中取得数据库连接
userTx.begin(); // 启动事务
stmtA = connA.createStatement();// 将 A 账户中的金额减少 500
stmtA.execute("update t_account set amount = amount - 500 where account_id = 'A'");
// 将 B 账户中的金额增加 500
stmtB = connB.createStatement();
stmtB.execute("update t_account set amount = amount + 500 where account_id = 'B'");
userTx.commit();// 提交事务
// 事务提交:转账的两步操作同时成功(数据库 A 和数据库 B 中的数据被同时更新)
} catch(SQLException sqle){
// 发生异常,回滚在本事务中的操纵
userTx.rollback();// 事务回滚:数据库 A 和数据库 B 中的数据更新被同时撤销
} catch(Exception ne){ }
}
两阶段提交保证了分布式事务的原子性,第一阶段是准备阶段;第二阶段是提交阶段
mybatis 是 Spring 数据库CRUD 的常用工具, 它使用 xml 并自定义sql语句进行CRUD
mybatis缓存: mybatis有两级缓存;第一级缓存是sqlSession缓存默认开启;第二级缓存是跨sqlSession的缓存,mapper级别
发出一个查询sql, 查询结果以map存储在一级缓存里,key=MapperId+offset+limit+Sql+parameters,value=用户信息
同一个sqlsession 再发出相同的sql就会从缓存拿出数据,如果中途出现CUD操作,缓存就会被清空
mapper 以 namespace为单位创建缓存,结构还是map
mybatis 的 二级缓存通过 CacheExecutor实现,CacheExecutor会先匹配缓存是否存在不存在才会查询数据库
key: MapperId + offset + limit + Sql + parameters
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有