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 ;
}
}

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

spring-第十五篇之AOP面向切面编程之AspectJ框架简单应用的更多相关文章

  1. spring-第十六篇之AOP面向切面编程之Spring AOP

    1.上一篇介绍了AspectJ在AOP的简单应用,让我们了解到它的作用就是:开发者无需修改源代码,但又可以为这些组件的方法添加新的功能. AOP的实现可分为两类(根据AOP修改源码的时机划分): 1& ...

  2. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...

  3. Z从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    本文梯子 本文3.0版本文章 代码已上传Github+Gitee,文末有地址 大神反馈: 零.今天完成的深红色部分 一.AOP 之 实现日志记录(服务层) 1.定义服务接口与实现类 2.在API层中添 ...

  4. C#使用KingAOP实现AOP面向切面编程一

    AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 实现AOP主要由两种方式,一种是编译时静态植入,优点是 ...

  5. Spring详解篇之 AOP面向切面编程

    一.概述 Aop(aspect oriented programming面向切面编程),是spring框架的另一个特征.AOP包括切面.连接点.通知(advice).切入点(pointCut) . 1 ...

  6. 重新学习之spring第二个程序,配置AOP面向切面编程

    第一步:在配置好的ioc容器的基础上,导入面向切面编程所需要的jar包 (本案例用的是spring3.2.4,由于spring3.2.4的官网jar包中不再有依赖包,所以依赖包都是从网上找的) 第二步 ...

  7. 面向切面编程之cglib代理方式

    思想: 和上一篇面向切面编程之手动JDK代理方式上的需求和开发模式一样.不同的是目标类没有接口,只有实现类,采用的是spring中提供的Enhancer类继承目标类实现的代理方式. 需要导入的jar包 ...

  8. Spring Boot2(六):使用Spring Boot整合AOP面向切面编程

    一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop ​ aop全称Aspec ...

  9. 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking

    目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...

随机推荐

  1. 64bit机器编译32bit汇编

    sudo apt-get install gcc-multilib sudo apt-get install g++-multilib gcc -m32  -S a.c -o a.s gcc -m64 ...

  2. 【洛谷P2398】GCD SUM

    题目大意:求 \[\sum\limits_{i=1}^n\sum\limits_{j=1}^ngcd(i,j)\] 题解: 最重要的一步变换在于. \[\sum\limits_{k=1}^n k \s ...

  3. React Autocomplete(自动完成输入)示例教程

    React Autocomplete示例教程是今天的主题.在现代Web开发中,使用React改善用户体验是很容易.自动完成的概念很简单.它是基于用户输入的建议列表.然后,用户可以按Enter键以完成短 ...

  4. Django【第15篇】:Django之Form组件归类

    Form组件归类 一.Form类 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; 1.Django内置字段如下: 1 Field 2 r ...

  5. C++ GUI Qt4编程-创建自定义窗口部件

    C++ GUI Qt4编程-创建自定义窗口部件   Qtqt4 通过Qt窗口部件进行子类化或者直接对QWidget进行子类化,就可以创建自定义窗口部件,下面示范两种方式,并且也会说明如何把自定义窗口部 ...

  6. Windows Server2008R2蓝屏,分析dmp文件

    使用Windbp PreView打开dmp文件后,在命令栏输入如下命令: !analyze -v 解析结果中蓝色字体为错误原因分析

  7. 【NOIP2013模拟】归途与征程

    题目 分析 好吧...明显是暴力题. 首先,把A串分成只有小写字母组成的小分串,按顺序存放:A[1].A[2].A[3]--. 对于同构循环串,显然把两个B串合在一起,成为一个新的C串.\(C[i.. ...

  8. echart--如何将echart的配置项,放到webpack中(CHARTTEMPLATE时)

    1.假如,我们已经写好了组件,我们需要把它放入到一个环境中去 2.首先在index.html中,我们需要写一个dom结构 3.新建一个,chart.js文件(这个里面放组件的代码) 1>开始创建 ...

  9. B/S超大文件上传与下载

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  10. [JSOI2008]最大数 题解

    前言 巨佬说:要有线段树,于是蒟蒻就开始打线段树. 蒟蒻只能拿之前0分的板子题开刀了QAQ. 题解 一开始我以为插入操作不带取模,于是打了下面这个弱智玩意 下面的代码是会WA的 #include &l ...