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 ;
}
}
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框架简单应用的更多相关文章
- spring-第十六篇之AOP面向切面编程之Spring AOP
1.上一篇介绍了AspectJ在AOP的简单应用,让我们了解到它的作用就是:开发者无需修改源代码,但又可以为这些组件的方法添加新的功能. AOP的实现可分为两类(根据AOP修改源码的时机划分): 1& ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...
- Z从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
本文梯子 本文3.0版本文章 代码已上传Github+Gitee,文末有地址 大神反馈: 零.今天完成的深红色部分 一.AOP 之 实现日志记录(服务层) 1.定义服务接口与实现类 2.在API层中添 ...
- C#使用KingAOP实现AOP面向切面编程一
AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 实现AOP主要由两种方式,一种是编译时静态植入,优点是 ...
- Spring详解篇之 AOP面向切面编程
一.概述 Aop(aspect oriented programming面向切面编程),是spring框架的另一个特征.AOP包括切面.连接点.通知(advice).切入点(pointCut) . 1 ...
- 重新学习之spring第二个程序,配置AOP面向切面编程
第一步:在配置好的ioc容器的基础上,导入面向切面编程所需要的jar包 (本案例用的是spring3.2.4,由于spring3.2.4的官网jar包中不再有依赖包,所以依赖包都是从网上找的) 第二步 ...
- 面向切面编程之cglib代理方式
思想: 和上一篇面向切面编程之手动JDK代理方式上的需求和开发模式一样.不同的是目标类没有接口,只有实现类,采用的是spring中提供的Enhancer类继承目标类实现的代理方式. 需要导入的jar包 ...
- Spring Boot2(六):使用Spring Boot整合AOP面向切面编程
一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop aop全称Aspec ...
- 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking
目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...
随机推荐
- java代码实现H5页面
public void getH5(HttpServletResponse response){ StringBuffer res=new StringBuffer(); res.append(&qu ...
- Mybatis(三)MyBatis 动态SQL
在 MyBatis 3 之前的版本中,使用动态 SQL 需要学习和了解非常多的标签,现在 MyBatis 采用了功能强大的 OGNL( Object-Graph Navigation Language ...
- 过滤函数filter
>>> def validate(usernames): if (len(usernames) > 4) and (len(usernames) < 12): retur ...
- Keras MAE和MSE source code
def mean_squared_error(y_true, y_pred): if not K.is_tensor(y_pred): y_pred = K.constant(y_pred) y_tr ...
- 【微信小程序】使用vscode编写微信小程序项目
1. 在微信开发者工具(以下简称:开发者)中新建一个模板微信小程序 2. 在开发者中将模拟器分隔开 3. 设置在保存时编译 4. 在vscode中打开项目目录 5. 下载代码提示插件 这样就可以在vs ...
- Thread的几种方法的使用
1:setPriority() 设置线程的优先级,从1 到10. 5是默认的. 1是最低优先级. 10是最高优先级 public class MyThread01 implements Runn ...
- Linux内核设计与实现 总结笔记(第十四章)块I/O层
一.剖析一个块设备 块设备最小的可寻址单元是扇区. 扇区大小一般是2的整数倍,最常见的是512字节. 因为各种软件的用途不同,所以他们都会用到自己的最小逻辑可寻址单元----块.块只能基于文件系统,是 ...
- POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)
题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...
- 【学习心得】Link-cut Tree
Link-cut Tree是一种支持改变树(森林)的形态(link和cut),同时维护树的路径上节点信息的数据结构.lct通过splay来维护每次的perferred path,说白了就是一个动态的树 ...
- 企业级技术解决方案:hbase+es
1:需求: 解决海量数据的存储,并且能够实现海量数据的秒级查询 Hbase是典型的nosql,是一种构建在HDFS之上的分布式.面向列的存储系统,在需要的时候可以进行实时的大规模数据集的读写操作:但是 ...