JAVA并发编程之线程池ThreadPoolExcutor
JAVA并发编程之线程池
JAVA并发编程之线程池ThreadPoolExcutor
Spring 事务
简介
spring支持编程式事务管理和声明式事务管理两种方式:
- 编程式事务是在代码中直接加入处理事务的逻辑,可能需要在代码中显式调用beginTransaction()、commit()、rollback()等事务管理相关的方法。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
- 声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
二者区别:编程式事务侵入性比较强,但处理粒度更细.
Sring Aop的实现
spring AOP的概念
1、Spring AOP中的几个基本概念:
- 切面(Aspect):切面就是一个关注点的模块化,如事务管理、日志管理、权限管理等;
- 连接点(Joinpoint):程序执行时的某个特定的点,在Spring中就是一个方法的执行;
- 通知(Advice):通知就是在切面的某个连接点上执行的操作,也就是事务管理、日志管理等;
- 切入点(Pointcut):切入点就是描述某一类选定的连接点,也就是指定某一类要织入通知的方法;
- 目标对象(Target):就是被AOP动态代理的目标对象;
2、设计分析
Spring AOP 的核心技术是JDK的动态代理技术(参考:JDK动态代理 一文)。
Spring Aop 生效需要经过一系列的操作,首先要为目标对象建立代理对象(接口是JDK代理实现,类是第三方CGLIB 来完成),然后启动代理对象的拦截器来完成切面的织入(通过一系列的适配器来实现的)。
3、应用场景
日志功能、权限校验、以及事物处理。
JDK动态代理
JDK的动态代理,使用最经典的应该是spring AOP,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现(具体可看Spring AOP的实现).
通过JDK的动态代理,可以为任意的JAVA对象创建代理对象.
代理模式
Spring 数据库组件之JDBC
java操作数据库的基本步骤如下:
- 建立数据库连接
- 创建Statement或者PreparedStatement
- 执行sql,返回ResultSet
- 关闭ResultSet
- 关闭Statement
- 关闭Connection
Spring BeanPostProcessor的实现
BeanPostProcessor接口作用
如果我们需要在Spring容器完成Bean的实例化、配置和其他的初始化前后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现,然后注册到容器中。
Spring DispatcherServlet
web.xml中的ContextLoaderListener与项目的启动相关,那DispatcherServlet又有什么作用呢?