美文网首页一篇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