我的spring 下

来源:互联网 发布:iphone怎么修改mac地址 编辑:程序博客网 时间:2024/05/16 19:32

spring下
目的是帮助我理解关于AOP的一些基本概念
一.概念
1.什么是AOP?
AOP为Aspect-Oriented Programming,意思是面向横切面编程
2.事务
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
特性:原子性;一致性;隔离性;持久性。
3.Spring对AOP的支持
Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。
规则
1、默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
2、当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB
关键点:
代理对象的方法=增强处理+被代理对象的方法。
下面给出一个Spring AOP的.xml文件模板,名字叫做aop.xml,之后的内容都在aop.xml上进行扩展:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"></beans>

4.声明式事务的使用:
Spring默认情况下是不支持AOP功能的,如果使用需要引入AspectJ jar包。AspectJ是专门来做AOP操作的框架,Spring可以利用AspectJ进行AOP编程。看一下步骤吧!
1,拷贝相应的jar包:
commons-logging.jar
spring.jar(Spring核心jar包,支持IoC的jar包)

SPRING_HOME\lib\aspectj\aspectjrt.jar
SPRING_HOME\lib\aspectj\aspectjweaver.jar(支持AOP的jar包)

SPRING_HOME\lib\cglib\cglib-nodep-2.1_3.jar(支持继承动态的jar包)

2,拷入的核心配置文件applicationContext.xml需要加入增加命名空间和约束文件:

<beans...xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="...http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

3,核心配置文件中启用AOP功能:

 <aop:aspectj-autoproxy/>

4, 定义目标类:
目标类可以有接口,如果有接口Spring使用jdk动态代理产生代理对象,完成功能扩展。也可以没有接口,如果没有接口,Spring使用cglib代理产生代理对象,完成功能扩展。
5,定义扩展对象,只是普通的javabean类,里边定义我们扩展的方法即可!
6,在核心配置文件中配置目标对象和代理对象,还有就是两者之间的关系,例如:

<!-- 声明目标类对象 -->  <bean id="targetDao" class="com.ljh.spring.aop.TargetDao"></bean>  <!-- 声明扩展类对象,计算方法的执行时间 -->  <bean id="timePrint" class="com.ljh.spring.aop.TimePrint"></bean>  <!-- 组合目标对象和扩展对象的关系 -->  <aop:config>      <aop:aspect id="timeAspect" ref="timePrint">          <aop:pointcut expression="execution(public * * (..))" id="timePoincat"   isolation="DEFAULT" rollback-for="java.lang.Exception"/>          <aop:before method="printStartTime" pointcut-ref="timePoincat"    isolation="DEFAULT"   rollback-for="java.lang.Exception"/>          <aop:after method="printEndTime" pointcut-ref="timePoincat"   isolation="DEFAULT"  rollback-for="java.lang.Exception"/>      </aop:aspect>   </aop:config>  

基于Spring的AOP简单实现