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
spring-第十五篇之AOP面向切面编程之AspectJ框架简单应用相关推荐
- python aop编程_学习笔记: AOP面向切面编程和C#多种实现
AOP:面向切面编程 编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统 类--砖头 系统--房子 类--细胞 系统--人 面向对象是非常适合做大型 ...
- Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面
初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...
- 大数据WEB阶段Spring框架 AOP面向切面编程(一)
Spring - AOP面向切面编程(一) 一.代理模式概述 代理的特点:(目标对象即被代理者) 实现和目标对象相同的接口 具备和目标对象的方法 代理者不仅要做目标对象的方法 , 还要做一些额外的操作 ...
- 大数据WEB阶段Spring框架 AOP面向切面编程(二)
Spring AOP面向切面编程(二) 一.切入点的execution表达式 execution的表达形式: execution(修饰符? 返回值类型 所在包类? 方法名(参数列表) 异常?) ?表示 ...
- 【SSM】Spring系列——AOP面向切面编程
文章目录 03 AOP面向切面编程 3.1 AOP概述 3.2 面向切面编程对有什么好处 3.3 模拟AOP框架实现 3.3.1 代码实现版本一 3.3.2 代码实现版本二 3.3.3 代码实现版本三 ...
- Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
<p>这篇文章介绍如何使用 Jpa 和 Thymeleaf 做一个增删改查的示例.</p> 先和大家聊聊我为什么喜欢写这种脚手架的项目,在我学习一门新技术的时候,总是想快速的搭 ...
- 坚持的力量 第十五篇
第十五篇 漩涡鸣人 从他身上,我看到了进步和向上的力量,经别人推荐,我发现我渐渐的喜欢上了<火影忍者>. 首先,<火影>中的歌曲很有震撼力和穿透力,产生心灵的共鸣 ...
- Spring 详解(三):AOP 面向切面的编程
AOP即面向切面编程,它通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型. ...
- 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
秒杀多线程第十五篇 关键段,事件,互斥量,信号量的"遗弃"问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回 ...
- CCIE理论-第十五篇-IPV6-重分布+ACL+前缀列表
CCIE理论-第十五篇-IPV6-重分布+ACL+前缀列表 重分布前面讲过,这里再讲一次+实操+效果看看 在ipv6中重分布直连路由是需要加上include-connected的 环境 就这么简单哈, ...
最新文章
- IIS启动配置的一些命令
- 服务幂等以及常用实现方式
- 常用AT指令集 (转)
- python有几种容器_Python中几种内置的容器(Containers)类型:列表、字典、集合和元组的比较和该注意的点...
- 小众却顽强的编程语言 Erlang ,你了解多少?
- linux权限bcd码是6,Linux权限管理(1)基本权限
- c++new时赋初值_如何把C++的源代码改写成C代码?
- sqlserver2008_是时候挥别 SQL Server 2008 了
- Linux下修改PATH的方法
- 我数学不好,适合做程序员吗?
- opensuse13.1(x64) ibus 添加五笔失败
- ajax回调函数的各个参数的理解
- c语言求阶乘的两种算法(递归和循环)
- 大数据时代的大数据技术与应用有哪些
- 英语数字表达方式大全
- 性别检测识别、年龄检测识别
- VM无法将网络更改为桥接状态:没有未桥接的主机网络适配器
- 软件测试肖sir__006xmind思维导图实战__微信发红包
- [PMZL]第1卷-误入天庭-01
- 如何在Windows中创建新用户?
热门文章
- 梦笔记2022-2-1
- qmake:未找到命令
- 明明是OS问题,却认为是CPU,这个教训是什么
- Github删除一个无用库
- LINUX SHELL删除文件中的回车(WINDOWS转LINUX)
- opencv出错:error: (-213:The function/feature is not implemented) Unknown/unsupported array type
- linux系统vi编辑器按esc没反应,关于ubuntu14.04版本vi编辑模式按下ESC无法回到一般模式的问题...
- c++ const 和 define
- java修饰符super_Java 继承 方法重写 super关键字 访问权限修饰符
- @param注解什么意思_你对Java注解真的理解吗?