本篇文章只用于记录作者使用spring aop的过程,勿喷。
在spring项目中使用其提供的aop可以更加方便的对自己的代码进行扩展,下面是使用的过程:
- 在使用之前肯定是要先添加aop的一些依赖
<!--提供切面的注解依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--提供代理、包扫描等配置-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
- 本文使用cglib进行织入
我这里首先编写了一个配置类,用来对包进行扫描,选择不同的织入方式。
@EnableAspectJAutoProxy中的proxyTargetClass参数用来选择不同的织入方式,true为cglib方式,false为aspectJ方式(本文不对这两种方式进行解释,不过这个大佬的这篇文章讲的很清楚 aop)。@Configuration @EnableAspectJAutoProxy(proxyTargetClass = true) @ComponentScan("com.huang") public class Config { }
@ComponentScan定义扫描的包位置 - 创建一个接口,规定需要做的动作。
public interface MethodInterface {
public void s();
}
然后用一个类实现它
@Component("object1")
public class Object1 implements MethodInterface {
@Override
public void s() {
System.out.println("Object1 输出=================");
}
}
- 新建一个类用来添加切面代码
@Aspect
@Component
public class MethodAspect {
@Pointcut("execution(* com.huang.test.myInterface..*.*(..))")
public void point1() {}
@Before("point1()&&within(com.huang.test.myInterface.MethodInterface)")
public void before() {
System.out.println("method before被调用============");
}
}
- 最后就是创建一个测试类进行测试了
这里需要使用spring的ioc来获取实例,因为我们需要用到扫描才能让切面生效。
@Test
void test02() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
Object1 object1 = context.getBean("object1", Object1.class);
object1.s();
}
最后调用就能发现生效了
可能上面有很多地方讲的不对,欢迎指正,谢谢。