完成接口和接口的实现,这里使用的是注解的方式设置bean,在applicationContext.xml中填写扫描包即可
<context:component-scan base-package=“AOPTEA”></context:component-scan>
package AOPTEA;
/**
* @Author susuper
* @Date 2020/1/1 15:34
* @description:
*/
public interface SayHello {
public void say();
}
package AOPTEA;
import org.springframework.stereotype.Component;
/**
* @Author susuper
* @Date 2020/1/1 15:39
* @description:
*/
@Component("SayHelloAspect")
public class SayHelloAspect {
public void before(){
System.out.println("before");
}
public void after(){
System.out.println("after");
}
}
完成
package AOPTEA;
import org.springframework.stereotype.Component;
/**
* @Author susuper
* @Date 2020/1/1 15:39
* @description:
*/
@Component("SayHelloAspect")
public class SayHelloAspect {
public void before(){
System.out.println("before");
}
public void after(){
System.out.println("after");
}
}
在spring的配置文件中说明切入点
<aop:config>
<!--定义切面-->
<aop:aspect ref="SayHelloAspect">
<aop:pointcut id="say" expression="execution(* AOPTEA.SayHello.*(..))"></aop:pointcut>
<aop:before method="before" pointcut-ref="say"></aop:before>
<aop:after method="after" pointcut-ref="say"></aop:after>
</aop:aspect>
</aop:config>
ref用来指向负责切入的方法类,expression用来指出切入点,id可以认为是一个代号,后面用before和after包裹它。 其中expression有一系列表达方法可以参考这篇文章https://www.cnblogs.com/feng9exe/p/10949665.html
下面完成使用纯注释的配置方法
首先需要在spring中开启aspectj的注解方法
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
之后SayHello接口和SayHelloImpl不需要修改,修改SayHelloImpl即可
在类上添加@Aspect注解,在对应方法上添加@Before和@After
package AOPTEA;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
/**
* @Author susuper
* @Date 2020/1/1 15:39
* @description:
*/
@Aspect
@Component("SayHelloAspect")
public class SayHelloAspect {
@Before("execution(void AOPTEA.SayHello.*())")
public void before(){
System.out.println("before");
}
@After("execution(void AOPTEA.SayHello.*())")
public void after(){
System.out.println("after");
}
}