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要重新编译
如果对应的类没有重新编译,则切面不会生效
分享到:
相关推荐
总的来说,Spring @AspectJ为开发者提供了一种简单、直观的方式来实现面向切面编程。通过定义切面和通知,我们可以将关注点分离,提高代码的可维护性和复用性。在实际项目中,这种技术常用于日志、事务管理、性能...
在"AopDemo-master"压缩包中,通常包含了一个简单的AspectJ示例项目,可能包括以下部分: 1. **源代码**:包含切面类(如LoggingAspect)和业务逻辑类(如Service类)。 2. **配置文件**:如Spring的XML配置文件,...
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
以下是一个简单的AspectJ事务管理切面示例: ```java @Aspect @Component public class TransactionAspect { @Around("execution(* com.example.repository.*.*(..))") public Object handleTransaction...
我们将通过一个简单的例子,演示如何在XML和@AspectJ两种模式下实现日志记录的切面。这将包括定义切入点、通知的编写,以及如何在应用程序上下文中注册这些切面。 7. 性能与选择 尽管@AspectJ提供了更丰富的表达...
例如,我们创建一个简单的日志记录切面: ```java @Aspect public class LoggingAspect { @Pointcut("execution(* com.example.service.*.*(..))") public void allServiceMethods() {} @Before(...
例如,下面是一个简单的AspectJ注解示例: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { System.out....
下面是一个简单的例子,展示如何使用AspectJ注解: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { // ...
例如,一个简单的切面可能如下所示: ```java import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class LoggingAspect { @Before("execution(* ...
以下是一个简单的例子: ```xml (* com.example.service.*.*(..))"/> (* com.example.service.*.*(..))"/> ``` 在这个例子中,`loggingAspect`是一个切面,引用了`loggingService` bean,其中`logBefore...
在这个例子中,`LoggingService`是一个包含`beforeServiceExecution`和`afterServiceExecution`方法的切面类。`serviceMethods`切入点匹配了`com.example.service`包下的所有方法。`beforeServiceExecution`方法将在...
总的来说,"Android AspectJ的demo"提供了一个学习和实践AOP在Android开发中应用的实例,它涵盖了切面的定义、切点选择和通知执行等关键概念。通过深入研究这个demo,开发者可以掌握如何利用AspectJ来改进Android...
在这个例子中,我们将重点讨论Spring AOP以及如何结合AspectJ进行更深入的切面编程。 **一、Spring AOP基础** Spring AOP是Spring框架的一部分,它提供了一种在运行时动态地将行为加入到对象中的方法。AOP的核心...
- **提高测试性:**将横切关注点从核心业务逻辑中分离出来后,可以使单元测试更加简单易行。 #### 面向切面编程(AOP)原理与实践 - **AOP基本概念:** - **切面(Aspect):**一个关注点的模块化表示。 - **连接点...
在这个例子中,`loggedOperations`是一个pointcut,它匹配所有在`banking`包及其子包内的方法调用。`before()`和`after()`是advice,分别在方法执行前和执行后执行,用于记录日志信息。 Spring AOP是Spring框架自带...
例如,下面的代码展示了如何使用@AspectJ定义一个简单的切面: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint...
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
以下是一个简单的AspectJ @Before Advice的例子: ```java @Before("execution(* android.app.Activity.on**(..))") public void onActivityMethodBefore(JoinPoint joinPoint) throws Throwable { // 在Activity...