zoukankan      html  css  js  c++  java
  • spring-AOP-基于@AspectJ切面的小例子

    条件:

    1.jdk的版本在5.0或者以上,否则无法使用注解技术

    2.jar包:

      aspectjweaver-1.7.4.jar

      aspectjrt-1.7.4.jar

      spring-framework-bom-4.0.5.RELEASE-sources.jar

    开始编写一个简单的基于@AspectJ的切面

    //代理对象
    public class testweaver {
        public void hello(){
            System.out.println("hello,world");
        }
    }
    @Aspect //通过注解的方式标示为切面
    public class TestAnnotationAspect {//定义切点@Before和增强类型
        @Before("execution(* hello(..)))")
        public void doBefore(){
            System.out.println("前置通知");
        }
        //定义切点@After和增强类型
        @After("execution(* hello(..)))")
        public void doAfter(){
             System.out.println("最终通知"); 
        }
    }
    public class Test{
       public static void main(String[] args) {
                  //创建对象
            AspectJProxyFactory a = new AspectJProxyFactory();
            testweaver t = new testweaver();
                  //设置目标对象
            a.setTarget(t);
                  //设置切面类
            a.addAspect(TestAnnotationAspect.class);
                  //生成织入的代理对象
            testweaver t2 = a.getProxy();                                                  
            t2.hello();
        }
    }

     整个流程:

    在这个例子中, testweaver类和TestAnnotationAspect类都只是一个简单的类,而TestAnnotationAspect类标注了@AspectJ的注解,

    这让在后续的第三方程序能检测的到拥有@Aspect的类是否是一个切面类。

    其次,TestAnnotationAspect类中的doBefore() 标注了@Before,意思为前置增强。后面的execution() 使用切点函数的方法匹配模式串注明了成员值。

    而成员值为一个@Aspectj切点表达式,意思为在目标类的hello()上织入增强,可以带入任意的入参和任意的返回值。

    最后通过org.springframework.aop.aspectj.annotation.AspectJProxyFactory 为 testweaver类生成切面代理。

  • 相关阅读:
    wnmpa或lnmpa 服务器搭建和原理
    windows 桌面图标 隐藏 小盾牌标志
    C# 执行 CMD 终极稳定解决方案
    比较两个object是否相等
    Microsoft Store 加载失败
    ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
    Win10安装gcc、g++、make
    通过proxifier实现酸酸乳全局代理
    C# 字母转数字
    html中设置锚点定位的几种常见方法(#号定位)
  • 原文地址:https://www.cnblogs.com/tjc1996/p/5720411.html
Copyright © 2011-2022 走看看