一、概述

  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

  简而言之,aop的作用就是在不修改源码的情况下对程序进行增强,如权限校验,日志记录,性能测试,事务控制。

二、aop的操作术语

Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点

Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.

Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

Aspect(切面): 是切入点和通知(引介)的结合

Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

Target(目标对象):代理的目标对象(要增强的类)

Weaving(织入):是把增强应用到目标的过程.把advice 应用到 target的过程

Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

三、在spring中aop操作之HelloWorld

  1.基于aspectj的xml配置

    例如:测试程序运行时间

    a.导入aop操作所需的jar包 在spring的配置文件中导入相关约束     

    b.配置aop操作的

    

<!--配置需要被加强的方法的对象以及用来加强类的对象-->
<bean id="student"  class="cn.Student"></bean>
<bean id="strengthen"  class="cn.strengthen"></bean>

 <!-- 2配置aop操作 -->
 <aop:config>

   <!-- 配置切入点 -->  

 <aop:pointcut expression="execution(* cn.Student.study(..))"    id="poitcutAdd" />  

 <!-- 配置切面(把增强用到方法上去) --> 

  <aop:aspect ref="strengthen">  

  <!-- 指定增强类型    method:用那个方法来增强    pointcut-ref:被增强的切入点  -->  

 <aop:before method="front1" pointcut-ref="poitcutAdd" />   

 <!--配置切入方式为环绕(环绕通知)-->

  <aop:around method="aroundFront" pointcut-ref="poitcutAdd" />

   </aop:aspect>  

</aop:config>

  c.student和strengthen类

public class Strengthen {

    // ProceedingJoinPoint 用来执行被增强的方法
    public void aroundFront(ProceedingJoinPoint proceedingJoinPoint)
            throws Throwable {
        long f = System.currentTimeMillis();
    // 执行被增强的方法
proceedingJoinPoint.proceed();

System.out.println("程序执行用时:" + (System.currentTimeMillis() - f)); } }
public class Student {
    public void study() {
        System.out.println("测试方法");
    }

}

2.基于aspectj的注解配置

//注解方式进行aop操作
@Aspect
public class Student {
    @Before(value = "execution(* cn.mycookies.aop.Book.add(..))")
    public void front1() {
        System.out.println("前置增强");
    }

    @Around(value = "execution(* cn.mycookies.aop.Book.add(..))")
    public void aroundFront(ProceedingJoinPoint proceedingJoinPoint)
            throws Throwable {
        long f = System.currentTimeMillis();
        proceedingJoinPoint.proceed();

        System.out.println("程序执行用时:" + (System.currentTimeMillis() - f));
    }

}

四、在spring中使用开启事务有两种方式

  1.基于xml配置文件的事务管理

       <!--  配置事务管理器-->
    <bean id="dataSourceTransactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--配置事务增强-->
    <tx:advice id="txadvice1" transaction-manager="dataSourceTransactionManager">
        <!--做事务操作-->
        <tx:attributes>
            <!--设置进行事务操作的方法的匹配规则
            name方法名ing propagation为隔离级别-->
            <tx:method name="ZhuanZhang*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
        <!--配置切面-->
    <aop:config>
        <aop:pointcut
            expression="execution(* cn.mycookies.service.CustomerService.*(..))"
            id="pointcut1" />
        <aop:advisor advice-ref="txadvice1" pointcut-ref="pointcut1" />
    </aop:config>

  2.基于配置文件和注解方式(简单)

        <!--1 .配置事务管理器 -->
    <bean id="dataSourceTransactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 2.开启事务注解 -->
    <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
    <!-- 3.在方法所在类上加上注解即可Transactional -->        

  

Spring学习之AOP与事务的更多相关文章

  1. Spring学习之AOP的实现方式

    Spring学习之AOP的三种实现方式 一.介绍AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能 ...

  2. Spring 学习(五)--- 事务(未完成)

    问题 : Spring 事务传播机制是怎么样的,在什么应用场景使用 事务是什么 我们使用的框架可能是Hibernate/JPA或者是Mybatis,都知道的底层是需要一个session/connect ...

  3. Spring学习之AOP总结帖

    AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...

  4. spring学习(二) ———— AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  5. spring学习(八)事务操作

    一.事务的概念: 事务是并发控制的单位,一系列操作组成的工作单元,该工作单元内的操作是不可分割的,也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做,所有操作必须成功完成,否则 ...

  6. Spring学习之AOP

    Spring-AOP(Aspect-orented programming) 在业务流程中插入与业务无关的逻辑,这样的逻辑称为Cross-cutting concerns,将Crossing-cutt ...

  7. Spring学习之Aop的各种增强方法

    AspectJ允许使用注解用于定义切面.切入点和增强处理,而Spring框架则可以识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5一样的注解,但并没有使用AspectJ的 ...

  8. spring学习总结(mybatis,事务,测试JUnit4,日志log4j&slf4j,定时任务quartz&spring-task,jetty,Restful-jersey等)

    在实战中学习,模仿博客园的部分功能.包括用户的注册,登陆:发表新随笔,阅读随笔:发表评论,以及定时任务等.Entity层设计3张表,分别为user表(用户),essay表(随笔)以及comment表( ...

  9. spring学习笔记-AOP

    1.aop:aspect oriented programming 面向切面编程 2.aop在spring中的作用:   提供声明式服务(声明式事务) 允许用户实现自定义切面 3.aop:在不改变原有 ...

随机推荐

  1. Redis学习笔记(三)常用命令整理

    Redis 常用命令 1.DEL key 删除key2.EXISTS key 检查key是否存在3.KEYS * 查看所有的key4.EXPIRE key seconds 设置key的过期时间5.TT ...

  2. java程序性能调优---------------性能概述

    一.程序的性能通过哪几个方面表现 1.执行速度(程序反应反应是否迅速.响应时间是否足够短) 2.分配内存 (分配内存是否合理,是否过多的消耗内存或者内存溢出) 3.启动时间(程序从运行到可以正常处理业 ...

  3. Struts2学习笔记四 OGNL

    OGNL,全称为Object-Graph Navigation Language(对象图表达语言),它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,调用java对象的方法,同时能够自动 ...

  4. 【备忘】Idea的那些事

    说到Java的IDE,似乎eclipse和Idea是目前的主流.然而,OO的课程组却一直在推荐使用eclipse,于是很多人就这样错过了Idea这样强大的IDE工具.本文将会对于Idea和Idea的一 ...

  5. 记录python接口自动化测试--利用unittest生成测试报告(第四目)

    前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告 生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py ...

  6. C语言程序设计(基础)- 第7周作业

    为了防止误解,自从本周开始ppt.pta作业.博客作业的命名均与学校教学周一致. 要求一(20经验值) 完成PTA中题目集名为<usth-C语言基础-第七周作业>和<usth-C语言 ...

  7. css3 文字的设置

    1.text-shadow 有3个length参数,第1个表示水平偏移,第2个表示垂直偏移,第3个表示模糊(可选) .text11{text-shadow: 3px 3px 5px #f00 ;col ...

  8. git中级技能

    中级技能(上)               一.实验说明 从本节开始,我们会介绍一些中级和高级的用法,这些用法很少用到,前面三节的内容已经满足了日常工作需要,从本节开始的内容可以简单了解,需要的时候再 ...

  9. 亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案。

    使用PuTTY连接AWS的时候,一直出现network error connection refused.百度了这个问题,大家都说是SSH要设置成22.但是我已经设置过了,为什么还是遇到这个问题呢? ...

  10. DenseNet

    特点: dense shortcut connections 结构: DenseNet 是一种具有密集连接的卷积神经网络.在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有 ...