zoukankan      html  css  js  c++  java
  • spring-第十五篇之AOP面向切面编程之AspectJ框架简单应用

    1、去官方网站下载aspectj-1.8.0.jar

    2、在jar包目录启动cmd,执行java -jar aspectj-1.8.0.jar,Next

    3、检查JAVA_HOME路径是否正确,如果不正确,手动选择正确的JAVA_HOME,Next

    4、选择安装路径,这个其实解压过程,后续可以将这个安装路径的文件复制到其他地方安装运行,无需通过运行aspectj-1.8.0.jar安装并往注册表中写入信息。Install,安装完毕

    5、配置ASPECTJ_HOME环境变量,并添加到Path。将aspectjrt.jar添加进入classpath。环境配置完成,可以使用aspectj了。

    6、简单的aspectj框架AOP应用。新建项目aspectjTest

     7、编写相关代码Hello.java、World.java、AuthAspect.java、TransAspect.java、TxAspect.java、AfterAspect.java、AspectJTest.java

       Hello.java

    package com.lfy.bean;
    
    public class Hello{
        
        // 定义一个简单方法,模拟应用中的业务逻辑方法
        public void foo(){
            System.out.println("执行Hello组件的foo()方法");
        }
        
        //定义一个addUser()方法,模拟应用中添加用户的方法
        public void addUser(String name,String pass){
            System.out.println("执行Hello组件的addUser添加用户:"+name);
        }

    public int sayHello(){
    System.out.println("执行Hello组件的Hello.sysHello()打招呼");
    return 20;
    } }

    World.java

    package com.lfy.bean;
    
    public class World{
        //定义一个简单方法,模拟应用中的业务逻辑方法
        public void bar(){
            System.out.println("执行World组件的bar()方法");
        }
    }

    AuthAspect.java

    package com.lfy.aspect;
    
    public aspect AuthAspect{
        //指定在执行com.lfy.bean包中任意类的任意方法之前执行下面的代码块
        //第一个*号表示返回值不限;第二个*号表示类名不限
        //第三个*号表示方法名不限;圆括号中..代表任意个数、类型不限的形参
        before():execution(* com.lfy.bean.*.*(..)){
            System.out.println("模拟进行权限检查...");
        }
    }

    TransAspect.java

    package com.lfy.aspect;
    
    public aspect TransAspect{
        
        void around():execution(void com.lfy.bean.*.*(..)){
            
            System.out.println("模拟事务的开始");
            proceed();//回调函数
            System.out.println("模拟事务的结束");
        }
    }

    TxAspect.java

    package com.lfy.aspect;
    
    public aspect TxAspect{
        
        //定义Hello.sayHello()方法时执行下面的代码块
        Object around():call(int com.lfy.bean.*.*(..)){
            
            System.out.println("TxAspect模拟事务的开始");
            Object rvt=proceed();//回调函数
            System.out.println("TxAspect模拟事务的结束,目标方法返回值rvt为:"+rvt);
            return rvt;
        }
    }

    AfterAspect.java

    package com.lfy.aspect;
    
    public aspect AfterAspect{
        
    //定义一个切入点,其名为logPointcut,其匹配表达式为execution(* com.lfy.bean.*.*(..))
    pointcut logPointcut():execution(* com.lfy.bean.*.*(..));
    after():logPointcut(
    ){ System.out.println("方法结束时执行"); } }

    AspectJTest.java

    package com.lfy.main;
    
    import com.lfy.bean.Hello;
    import com.lfy.bean.World;
    
    public class AspectJTest{
        
        public static void main(String[] args){
            Hello hello=new Hello();
    World world=new World(); hello.foo();
    System.out.println(""); hello.addUser(
    "孙悟空","7788");
    System.out.println("");
    hello.sayHello(); System.out.println("");
    world.bar(); } }

    8、编译运行,查看结果

    进入src目录:执行 ajc -encoding utf-8 -sourceroots com,编译完成,没出现错误,在src目录,执行 java com.lfy.main.AspectJTest 运行主类

     9、如果使用ant管理上面的Aspectj项目,需要将安装目录下的aspectjtools.jar添加到系统变量CLASSPATH中,并使用iajc标签进行编译。

  • 相关阅读:
    .net开源工作流ccflow从表数据数据源导入设置
    驰骋开源的asp.net工作流程引擎java工作流 2015 正文 驰骋工作流引擎ccflow6的功能列表
    app:clean classes Exception
    Android Couldn't load BaiduMapSDK
    android okvolley框架搭建
    compileDebugJavaWithJavac
    android重复的文件复制APK META-INF许可证错误记录
    android listview多视图嵌套多视图
    通讯录笔记
    面试总结
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11304995.html
Copyright © 2011-2022 走看看