美文网首页一篇Spring带你快速入门
基于AspectJ的XML方式AOP开发

基于AspectJ的XML方式AOP开发

作者: 往事随风_0817 | 来源:发表于2019-02-14 23:36 被阅读1次

AspectJ的XML方式AOP开发

注解方式与XML方式在非常类似,为什么会有两种方式呢?-->用注解方式开发比较便捷,在维护的时候可能需要修改源代码这时候注解方式就显得不够灵活。用XML方式开发在维护的时候不需要修改源代码,XML集中了配置,直接在XML中直接操作,缺点配置繁多

XML方式开发AOP

  • 导包(XML方式开发AOP所需的jar包与注解方式是一样的)
//增强目标
public class CustomerDaoImpl implements CustomerDao {
    public void save() {System.out.println("保存客户...");}
    public void delete() {System.out.println("删除客户...");}

    public String update() {
        System.out.println("修改客户...");
        return "spring";
    }

    public void findOne() {
        System.out.println("查询一个客户...");
//       int a = 1/ 0;
    }

    public void findAll() {
        System.out.println("查询多个客户...");
//        int b = 1/0;
    }
}

//配置切面
public class MyAspectXml {

    // 前置通知
    public void before(JoinPoint joinPoint){
        System.out.println("XML方式的前置通知=============="+joinPoint);
    }

    // 后置通知
    public void afterReturing(Object result){
        System.out.println("XML方式的后置通知=============="+result);
    }

    // 环绕通知
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("XML方式的环绕前通知==============");
        Object obj = joinPoint.proceed();
        System.out.println("XML方式的环绕后通知==============");
        return obj;
    }

    // 异常抛出通知
    public void afterThrowing(Throwable e){
        System.out.println("XML方式的异常抛出通知============="+e.getMessage());
    }

    // 最终通知
    public void after(){
        System.out.println("XML方式的最终通知=================");
    }
}

//XML
1.引入约束
xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"

<!--配置目标类-->
<bean id="customerDao" class="cn.akwangl.aspectJXMl.CustomerDaoImpl"/>
<!--配置切面类-->
<bean id="myAspectXml" class="cn.akwangl.aspectJXMl.MyAspectXml"/>

<!--aop的相关配置-->
<aop:config>
        <!--配置切入点-->
        <aop:pointcut id="pointcut1" expression="execution(* cn.akwangl.aspectJXMl.CustomerDao.save(..))"/>
        <aop:pointcut id="pointcut2" expression="execution(* cn.akwangl.aspectJXMl.CustomerDao.update(..))"/>
        <aop:pointcut id="pointcut3" expression="execution(* cn.akwangl.aspectJXMl.CustomerDao.delete(..))"/>
        <aop:pointcut id="pointcut4" expression="execution(* cn.akwangl.aspectJXMl.CustomerDao.findOne(..))"/>
        <aop:pointcut id="pointcut5" expression="execution(* cn.akwangl.aspectJXMl.CustomerDao.findAll(..))"/>
        <!--配置AOP的切面-->
        <aop:aspect ref="myAspectXml">
            <!--配置前置通知-->
            <aop:before method="before" pointcut-ref="pointcut1"/>
            <!--配置后置通知-->
            <aop:after-returning method="afterReturing" pointcut-ref="pointcut2" returning="result"/>
            <!--配置环绕通知-->
            <aop:around method="around" pointcut-ref="pointcut3"/>
            <!--配置异常抛出通知-->
            <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4" throwing="e"/>
            <!--配置最终通知-->
            <aop:after method="after" pointcut-ref="pointcut5"/>
        </aop:aspect>
    </aop:config>

相关文章

网友评论

    本文标题:基于AspectJ的XML方式AOP开发

    本文链接:https://www.haomeiwen.com/subject/jkjueqtx.html