1.下载
http://www.eclipse.org/aspectj/downloads.php#stable_release下载AspectJ的最新稳定版本
2. 安装是java -jar aspect-1.6.9.jar
安装后配置好path跟classpath可以直接使用ajc命令
这里没有安装,直接解压了
3.两个测试类
HelloWorld.java
package aaa;
public class HelloWorld {
public static void deliver(String message) {
System.out.println(message);
}
public static void deliver(String person, String message) {
System.out.println(person + ", " + message);
}
public static void round(String s){
System.out.println(s);
}
}
Test.java
package aaa;
public class Test {
public static void main(String[] args) {
HelloWorld.deliver("Wanna learn AspectJ?");
HelloWorld.deliver("Harry", "having fun?");
HelloWorld.round("round");
}
}
4. 编译,运行
java -cp aspectjtools.jar;aspectjrt.jar;classes org.aspectj.tools.ajc.Main -d classes src/aaa/*.java
java -cp classes;aspectjrt.jar aaa.Test
结果
引用
Wanna learn AspectJ?
Harry, having fun?
round
5. 加入切面,编译运行
MannersAspect.java
package aaa;
aspect MannersAspect {
// 定义切点 并且指明在哪个方法
pointcut deliverMessage() : call(* HelloWorld.deliver(..));
pointcut afterMessage() : execution (* HelloWorld.deliver(..));
pointcut roundMessage(String s) : call (* HelloWorld.round(String)) && args(s);
// 方法前拦截
before() : deliverMessage() {
System.out.println("before! ");
}
// 方法后拦截
after() : afterMessage(){
System.out.println("after! ");
}
void around(String s) : roundMessage(s) {
System.out.println("around before! ");
proceed("99 "+s+" 00 ");
System.out.println("around after! ");
}
}
java -cp aspectjtools.jar;aspectjrt.jar;classes org.aspectj.tools.ajc.Main -d classes src/aaa/*.java
java -cp classes;aspectjrt.jar aaa.Test
结果
引用
before!
Wanna learn AspectJ?
before!
Harry, having fun?
around before!
99 round 00
around after!
6. call 与 execution的区别
call是在调用方法的地方加入切点,会修改Test类
execution是在方法执行的地方加入切点,会修改HelloWorld类
call的切面需要aspect与call调用的类都重新编译,MannersAspect与Test要重新编译
execution需要aspect与方法定义的类重新编译,即MannersAspect与HelloWorld要重新编译
如果对应的类没有重新编译,则切面不会生效
分享到:
相关推荐
AspectJ经典实例 用例简单明了,适合初学者!~希望大家能多多交流!~
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
2 一个简单的基于@AspectJ的AOP例子 2.1 创建Performance接口 创建Performance(表演、演出)接口,接口包含一个方法perform(),包名为aop(本章的类均放在aop包中)。 2.2 创建Performance接口的实现类Ballet 创建...
客户端与服务端均在里面,服务端未连数据库,数据存配置。
为了练手培训,给大家准备的 Open Session In View 的简单例子,纯代码,大家可以参考,其中主要说了六部分内容: 1.通过接口编程 2.通过spring注入dao到 action 3.通过 open session in view filter 支持 延迟加载...
spring3.2.8使用aop的简单实例
spring 3.0 jar 最新所有开发包及开发项目实例 spring 3.0已经全面支持OSGi了。 各发行包的大致描述如下: org.springframework.asm-3.0.0.M4.jar: 提供对ASM(一个字节码框架)的简单封装 org.springframework....
aop写一个简单的计算器:(1)日志功能:在程序执行期间追踪正在发生的活动(打印出调用的方法,以及参数的参数值);...利用简单的实例来理解spring的aop编程,以aspectJ为例,理解环绕通知的真正含义。
这是用spring和aspectj 和cglib实现了切面编程的一个很简单的实例代码demo,供自己和大家参考
不要每次请求都实例化Spring Context; 对可以在后台运行的任务,考虑使用Spring的异步任务执行器来减少用户等待时间; 选择合适的远程访问协议,比如不需要SOAP的互通性,一个简单方案(如Spring的HttpInvoker支持...
2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性...
2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC ...
2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC ...
代理模式其实很简单 主要包括 接口+真实的实现类+代理类 在真实类的实例化的时候 使用代理类,所以需要 Spring AOP 做的是生成一个代理类,然后替换真实的类 去对外提供服务 那怎么去替换呢? 就是Spring IOC 容器中...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...
7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 ...
7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 ...
2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 ...
第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。 第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架...