我们先创建一个项目
然后引入java spring aop的依赖
然后 在src下创建目录 我这里 直接就叫 Aop了
下面创建一个User类
参考代码如下
package Aop;
import org.springframework.stereotype.Component;
@Component
public class User {
public void add(){
System.out.println("add......");
}
}
这个 app方法 将作为被增强方法使用
然后 我们在Aop目录下 再创建一个类 我这里叫 UserProxy 参考代码如下
package Aop;
import org.springframework.stereotype.Component;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Component
@Aspect
public class UserProxy {
//拆分公共切入点
@Pointcut(value = "execution(* Aop.User.add(..))")
public void commonEntryPoint() {
}
//被增强方法执行前调用
@Before(value = "commonEntryPoint()")
public void before() {
System.out.println("UserProxy before...");
}
}
这里 我们上面用Pointcut 写好了 切入点表达式 指定增强切入点 是 Aop包下 的 User类 add方法
然后 Before标准的方法 使用了这个切入点表达式
说明 UserProxy 作为增强类 对 User的add方法进行增强
然后 就是这次的重点 我们用一个配置类 来写 之前写在xml中的配置内容
在src目录下创建一个目录 我这里叫 config
参考代码如下
package config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@ComponentScan(basePackages = {"Aop"})
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class configAop {
}
ComponentScan指定 开启注解扫描 我们写入了一个Aop 表示 会对 src目录下的Aop包进行注解扫描 找到有注解的类内容
EnableAspectJAutoProxy配置则是 开启Aspect生成代理对象
然后 我们在src下创建测试类 参考代码如下
import Aop.User;
import config.configAop;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class aopText {
public static void main(String args[]) {
ApplicationContext context = new AnnotationConfigApplicationContext(configAop.class);
User user = context.getBean("user", User.class);
user.add();
}
}
这里 因为是配置类 我们 AnnotationConfigApplicationContext 就直接读类对象了
然后 获取User对象 然后调用add 因为UserProxy 中的方法指定增强add
所以 只要执行add 增强方法也会在特定时间点调用
运行结果如下
也是没有任何的问题