一.添加依赖包
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.2.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.1.2.RELEASE</version> </dependency>
二.编写业务逻辑类
这次业务逻辑类为一个计算功能的,简单起见只写了一个除法,理解思想就行...
public class Calculate { public int div(int a,int b){ return a/b; } }
三.编写切面类
这里比较重要,有@Aspect标注为切面类以和业务类分开,还有切点表达式的编写,以及通知类型等标签的使用。
//切面类 @Aspect public class LogAspects { @Pointcut("execution (public int com.Aop.Main.Calculate.*(..))") public void pointCut(){} @Before(value = "pointCut()") public void logStart(){ System.out.println("除法开始运行...{}"); } @After(value = "pointCut()") public void logEnd(){ System.out.println("除法结束..."); } @AfterReturning(value = "pointCut()") public void logReturn(){ System.out.println("除法正常返回..."); } @AfterThrowing(value = "pointCut()") public void logThrowing(){ System.out.println("除法异常...{}"); } }
四.AopConfig类
这个类相当于以前的application.xml里面的beans标签,@Bean就相当于Bean标签啦。要注意的一点是@EnableAspestJAutoProxy,这个是代替了以前的xml文件配置的<aop:aspect-autoproxy>启动注解式事务
@EnableAspectJAutoProxy @Configuration public class AopConfig { @Bean public Calculate calculate(){ return new Calculate(); } @Bean public LogAspects logAspects(){ return new LogAspects(); } }
五.测试
public class AopMainTest { public static void main(String[] args) { AnnotationConfigApplicationContext configApplicationContext = new AnnotationConfigApplicationContext(); configApplicationContext.register(AopConfig.class); configApplicationContext.refresh(); Calculate c = configApplicationContext.getBean(Calculate.class); c.div(1,2); configApplicationContext.close(); } }
结果如下: