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标签进行编译。

原文地址:https://www.cnblogs.com/ZeroMZ/p/11304995.html