一个简单的aop计算器小实验
@dyj
1、依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency></dependencies>
2.application-config.xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="Calculation" class="com.hncj.demo.service.CalculationImpl"/> <!----> <bean id="AnnoAdvice" class="com.hncj.demo.anno.AnnoAdvice" /> <aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>
3.目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bC2AUePc-1653520634442)(C:\Users\dyj\AppData\Roaming\Typora\typora-user-images\1653461047115.png)]
4、service
package com.hncj.demo.service;public interface Calculation { public void add(); public void s(); public void m(); public void d();}
package com.hncj.demo.service;public class CalculationImpl implements Calculation { @Override public void add() { System.out.println("a"); } @Override public void s() { System.out.println("s"); } @Override public void m() { System.out.println("m"); } @Override public void d() { System.out.println("d"); }}
5、切面类
package com.hncj.demo.anno;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;@Aspectpublic class AnnoAdvice { @Pointcut("execution(* com.hncj.demo.service.CalculationImpl.*(..))") public void pointcut(){ }// 之前 @Before("pointcut()") public void before(){ System.out.println("前置"); }// 之后 @After("pointcut()") public void after(){ System.out.println("后置"); }}
6、测试类
import com.hncj.demo.service.Calculation;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Mytest { @Test public void annoTest(){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application-config.xml"); Calculation calculation = context.getBean("Calculation", Calculation.class); calculation.add(); }}