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. python3-访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的na ...

  2. DDD领域驱动设计初探(六):领域服务

    前言:之前一直在搭建项目架构的代码,有点偏离我们的主题(DDD)了,这篇我们继续来聊聊DDD里面另一个比较重要的知识点:领域服务.关于领域服务的使用,书中也介绍得比较晦涩,在此就根据博主自己的理解谈谈 ...

  3. git-shell设置代理

    Configure Git to use a proxy ##In Brief You may need to configure a proxy server if you're having tr ...

  4. ESP8266-12F 中断

    外部中断: 基于ESP8266的NodeMcu的数字IO的中断功能是通过attachInterrupt,detachInterrupt函数所支持的.除了D0/GPIO16,中断可以绑定到任意GPIO的 ...

  5. linux运维、架构之路-linux目录结构

    1.linux重要目录 重要目录 说明 /etc 存放系统配置文件.服务启动命令的目录 /root 超级管理员的家目录 /sbin和usr/sbin 超级用户命令的目录 /boot 系统引导程序所在的 ...

  6. 前端面试题常考&必考之--盒子模型和box-sizing(项目中经常使用)

    主要考察width的值,包括padding\border\content等属性??? box-sizing属性是css3特有的哦*** 1>当box-sizing:content-box;时,跟 ...

  7. php中如何上传整个文件夹里的所有文件?

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  8. 大数据笔记(十二)——使用MRUnit进行单元测试

    package demo.wc; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.IntW ...

  9. 转载:String.format()的详细用法

    转载自:https://blog.csdn.net/anita9999/article/details/82346552 问题 在开发的时候一段字符串的中间某一部分是需要可变的 比如一个Textvie ...

  10. 前端每日实战:156# 视频演示如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jeaOrw 可交互视频 此视频是可 ...