• AspectJ注解版和XML版


    什么是AspectJ?

    AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

    Aspect注解版

    AspectJ自动代理

    1.在xml文件中配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"  xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--目标类型-->
    <bean id="service" class="cn.happy.Aspect01.UserServiceImpl"></bean>
    
        <!--增强-->
        <bean id="MyAspect" class="cn.happy.Aspect01.UserTest"></bean>
    
        <!--Aspectj自动代理-->
        <aop:aspectj-autoproxy/>
    
    
    </beans>
    

      

    2.创建接口、类

    package cn.happy.Aspect01;
    
    /**
     * Created by Administrator on 2018/3/10.
     */
    public interface IUserService {
        void select();
        void update();
    }
    

      

    package cn.happy.Aspect01;
    
    /**
     * Created by Administrator on 2018/3/10.
     */
    public class UserServiceImpl implements IUserService {
        public void select() {
            System.out.println("select OK!");
        }
    
        public void update() {
            int i=5/0;
            System.out.println("update OK!");
        }
    }
    

      

    UserTest类

    package cn.happy.Aspect01;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    
    /**
     * Created by Administrator on 2018/3/10.
     */
    @Aspect
    public class UserTest {
        //前置增强
        /*@Before("execution(* *..Aspect01.*.select(..))")
        public void MyAspectBefore(){
            System.out.println("Before===");
        }*/
    
    
        //后置增强
        /*@AfterReturning("execution(* *..Aspect01.*.select(..))")
        public void MyAspectAfter(){
            System.out.println("After===");
        }*/
    
        /*//环绕增强
        @Around("execution(* *..Aspect01.*.select(..))")
        public void MyAround(ProceedingJoinPoint pjp) throws Throwable {
            System.out.println("环绕增强A");
            pjp.proceed();
            System.out.println("环绕增强B");
        }*/
    
        /*//异常增强
        @AfterThrowing("execution(* *..Aspect01.*.update(..))")
        public void MyAfterThrowing(){
            System.out.println("网络异常");
        }*/
      //最终增强
        @After("execution(* *..Aspect01.*.update(..))")
        public void MyAfter(){
            System.out.println("最终增强");
        }
    
        //PointCut注解
        @Pointcut(value="execution(* *..Aspect01.*.select(..))")
        public void selects(){}
    
        @Pointcut(value="execution(* *..Aspect01.*.update(..))")
        public void update(){}
    
        @AfterReturning("selects()||update()")
        public void MyPointcutAfter(){
            System.out.println("After===");
        }
    }
    

      

    AspectJ  XML版

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"  xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--目标类型-->
    <bean id="service" class="cn.happy.Aspect02.IUserServiceImpl"></bean>
    
        <!--增强-->
        <bean id="MyAspect" class="cn.happy.Aspect02.UserTest"></bean>
    
       <aop:config>
           <!--切点-->
           <aop:pointcut id="MyPointCut" expression="execution(* *..Aspect02.*.select(..))"/>
           <!--切面Aspect-->
           <aop:aspect ref="MyAspect">
               <!--前置增强-->
               <aop:before method="select" pointcut-ref="MyPointCut"/>
    
                <!--后置增强-->
               <aop:after-returning method="After" pointcut-ref="MyPointCut"/>
    
               <!--环绕增强-->
                <aop:around method="MyAround" pointcut-ref="MyPointCut"/>
    
               <!--异常增强-->
               <aop:after-throwing method="MyThrowing" pointcut-ref="MyPointCut"/>
    
               <!--<!–最终增强–>
               <aop:after method="MyAfter" pointcut-ref="MyPointCut"/>-->
    
           </aop:aspect>
       </aop:config>
    
    
    </beans>
    

      

  • 相关阅读:
    PHP学习笔记一
    抓取【你懂的】应用的数据
    抓取[今日新闻]应用的数据
    开源项目Html Agility Pack实现快速解析Html
    澳大利亚玩全攻略(图文全彩版)
    畅游夏威夷,看这本就够了
    科学丨光的折射
    未解之谜.下
    科学是什么
    大脑奥秘知多少:脑科学初探
  • 原文地址:https://www.cnblogs.com/xuchangqi1/p/8550954.html
Copyright © 2020-2023  润新知