1、pom.xml依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
2、目标类,也是委托对象
@Component("calImpl")
public class CalIml implements Cal {
//AOP中,目标类也要使用Component注解,将它放到IOC容器中
@Override
public int add(int num1, int num2) {
int result = num1+num2;
return result;
}
@Override
public int sub(int num1, int num2) {
int result = num1 - num2;
return result;
}
@Override
public int mul(int num1, int num2) {
int result = num1 * num2;
return result;
}
@Override
public int div(int num1, int num2) {
int result = num1 / num2;
return result;
}
}
3、编写切面类
@Aspect
@Component
public class LoggerAspect {
//这是一个切面类,Spring会自动根据切面类以及目标类(委托对象)创建一个代理对象
//@Aspect 表示这是一个切面类,主要在解析 xml 时,用来识别
//@Component 表示将该类注入 IOC 容器中
@Before("execution(public int com.guozh.aspect.CalIml.add(..))")
public void AA(JoinPoint joinPoint){
//获取方法名
String name = joinPoint.getSignature().getName();
//获取参数列表
String args = Arrays.toString(joinPoint.getArgs());
System.out.println(name+"的参数是:"+args);
}
//@Before:表示 AA 方法的执行时机,在目标方法执行之前
//execution(public int com.guozh.aspect.CalIml.add(..)) 表示切入点是 com.guozh.aspect.CalIml.add(..)的 add 方法
}
4、编写 spring.xml 文件
<!--扫描整个包下类,这样碰到有 Component 注解的类就会生成对象-->
<context:component-scan base-package="com.guozh.aspect"/>
<!-- 使 Aspect 注解生效,为目标类自动生成代理对象。
添加 aop:aspectj-autoproxy 注解,Spring 容器会结合切面类和目标类自动生成动态代理对象,
Spring 框架的 AOP 底层就是通过动态代理的方式完成 AOP -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
5、测试
public static void main( String[] args ) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("sping.xml");
Cal calProxy = (Cal) applicationContext.getBean("calImpl");
calProxy.add(10, 3);
calProxy.sub(10, 3);
}
以上代码笔记内容来自付费专栏:案例上手 Spring 全家桶
PS:并没有透露关键内容,纯粹是零碎笔记。如果侵犯版权,请联系我。
本文由老郭种树原创,转载请注明:https://guozh.net/spring-aop-code-demo/