zoukankan      html  css  js  c++  java
  • SSH框架aop的切面表达式

    一:概述

    众所周知,Spring是一个轻量级的、非侵入式的、独立于各种应用服务器的开源框架。它的两大方面被人们所熟知,也应用很广。那就是IOC(控制反转)和AOP(面向方面编程)。

    IOC是开发者不创建对象,但是描述创建它们的方式,对象由Spring容器根据描述来产生对象,这里特别需要指出的是Spring是依赖于接口编程的,所以描述创建对象时,改对象必须实现于对应的接口

    AOP允许开发者对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

    二:实现

    目前在本人开发中用到的比较读多的是注解这一方案。


    首先在applicationXContext.xml中配置:

    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
                <tx:method name="query*" propagation="REQUIRED" read-only="true"/>
                <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
                <tx:method name="save*" propagation="REQUIRED" rollback-for="Throwable"/>
                <tx:method name="delete*" propagation="REQUIRED" rollback-for="Throwable"/>
                <tx:method name="update*" propagation="REQUIRED" rollback-for="Throwable"/>
            </tx:attributes>
        </tx:advice>
       
        <aop:config>
            <aop:pointcut id="interceptorPointCuts"
                expression="execution(public * com.meth.server.estudy..*Service*.*(..))" />
            <aop:advisor advice-ref="txAdvice"
                pointcut-ref="interceptorPointCuts" />
        </aop:config>
    

    在该配置中aop切面表达式为:public * com.meth.server.estudy..*Service*.*(..)

    这点极为重要,为何我们只要拦截到Service层?你们是否有考虑过这个问题


    1.当你的表达式为拦截全部时,Hibernate级联就会失败

    2.其次Struts的对象不会被容器创建,需要你手动创建,否则界面交互操作会失败

    <aop:pointcut>中的expression属性起到了关键性的作用,它定义了哪些对象的哪些方法执行时被aop拦截

    3、理解Spring中的AOP代理可以从理解JDK的动态代理开始,也就是某个类去实现java.lang.reflect.InvocationHandler接口

  • 相关阅读:
    e621. Activating a Keystroke When Any Child Component Has Focus
    e587. Filling Basic Shapes
    e591. Drawing Simple Text
    e595. Drawing an Image
    e586. Drawing Simple Shapes
    e636. Listening to All Key Events Before Delivery to Focused Component
    在 PL/SQL 块的哪部分可以对初始变量赋予新值? (选择1项)
    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
    你判断下面语句,有什么作用?(单选)
    Oracle数据库表空间与数据文件的关系描述正确的是( )
  • 原文地址:https://www.cnblogs.com/Nonnetta/p/3314288.html
Copyright © 2011-2022 走看看