web应用开发知识之spring(4)
spring AOP IOC 编程式事务等等
使用spring时,对象的创建及管理都是由spring容器负责,spring自带了几种容器实现,可以归为两种不同的类型:
(1)Bean工厂,BeanFactory是最简单的容器,提供基本的DI支持
(2)应用上下文,是基于BeanFactory之上构建,并提供面向应用的服务,例如从属性文件解析文本信息,以及发布应用事件给感兴趣的事件监听者的能力.
spring的思想之一: 依赖注入(依赖可通过构造器注入,setter注入)
(1)程序中察觉不到使用了spring,代码不与spring框架耦合
(2)对象间的依赖关系是基于接口引用,而不直接与实现耦合
(3)在程序中面向接口编程,在spring框架的xml中配置对象的创建与装配对象间的依赖关系,对象的创建与管理交由Spring 的Application Context负责
总之,依赖注入让相互协作的软件组件保持松散耦合
spring的思想之二: AOP
(1)AOP避免了业务对象与系统级服务(如日志记录,安全,事务等)结合得过于紧密,业务对象应该仅仅关系自己的核心业务功能,AOP能使系统级服务与核心业务逻辑相分离
(2)■通过在spring xml中将系统级服务配置成切面,然后配置好切入点及要应用的通知
(3)切面提供了取代继承和委托的另一种选择,在使用面向切面编程时,我们仍然在一个地方定义通用功能,但是我们可以通过声明的方式定义这个功能以何种方式在何处应用,而无需修改受影响的类,横切关注点可以被模块化为特殊的类,这些类被称为切面,这样做有两个好处:首先,每个关注点现在者只集中于一处,而不是分散到多处代码中,其次,服务模块更简洁,因为化们只包含核心业务逻辑,而非核心的功能被转移到切面了.
(4)AOP的实现原理:
Spring AOP是基于动态代理的,通过在代理类中包裹切面,Spring在运行期将切面织入到Spring管理的Bean中,并且中当在应用中需要被代理的Bean时,Spring才会创建代理对象,Spring只支持方法连接点,但是像AspectJ AOP和Jboss AOP ,是支持字段和构造器接入点的
使用Spring AOP,我们可以为Bean添加新的方法,代理会拦截调用并委托给实现该方法的其他对象:
AOP术语解析:
1 通知(Advice): 通知定义了切面是什么以及何时使用,Spring切面可以应用5种类型的通知
(1)Before: 在方法被调用之前调用通知(通知方法即是切面的方法)
(2)After
(3)After-returning
(4)After-throwing
(5)Around: 环绕通知,方法被调用前调用后都要求调用通知
2 连接点(Joinpoint):
3 切点: 切点用于准确定位应该在可处应用切面的通知(通知方法即是切面的方法)
Spring事务管理
1 Spring提供了对编码式和声明式事务管理的支持
2 编码式事务: 如果应用程序只使用一种持久化资源,spring可以使用持久化机制本身所提供的事务改天 支持,包括JDBC,Hibernate以及java持久化API,如果应用程序的事务跨多个资源,那么spring会使用第三方的JTA,实现分页式事务
3 声明式事务: 编码式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦.
4 Spring的事务管理器将事务管理的职责委托给特定平台的事务实现,如org.springframework.orm.hibernate3.HibernateTransactionManager等
5 在spring中,声明式事务是通过事务属性来定义的,事务属性描述了事务策略如何应用到方法上,事务属性包含了5个方面,如下图所示: