AOP的使用
所谓AOP的思想是现在程序设计中常用的一种设计思想,主要是为了能够更好的监控程序的运行的情况。 在Spring中AOP的思想展现的淋漓尽致。
实现一个简单的AOP。
1 2 3 4 5 6 7 8
| @Component public class OrderBiz { public void doSomething(int x, int y) { System.out.println(x + y); } }
|
增加一个AOP的类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| @Aspect public class LogAspector {
@Pointcut("execution(public void learnJava.spring.sprz05.OrderBiz.*(..))") public void pointCut(){} @Before("pointCut()") public void logStart(JoinPoint joinPoint) { System.out.println(joinPoint); RzLogger.info("方法开始执行...."); } @After("pointCut()") public void logEnd() { RzLogger.info("方法执行完成...."); } @AfterReturning("pointCut()") public void logReturn() { RzLogger.info("方法执行结束返回数据...."); } @AfterThrowing(value = "pointCut()",throwing = "ex") public void logException(Exception ex) { RzLogger.info("方法执行异常...."); RzLogger.error(JsonUtils.serializeObject(ex)); } @Around("pointCut()") public Object process(ProceedingJoinPoint joinPoint) throws Throwable { RzLogger.info("Around开始"); Object proceed = joinPoint.proceed(); RzLogger.info("Around结束"); return proceed; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Configuration @EnableAspectJAutoProxy public class ConfigMain {
@Bean public OrderBiz getOrderBiz(){ return new OrderBiz(); } @Bean public LogAspector getLogAspector(){ return new LogAspector(); } }
|
主方法的调用
1 2 3 4 5 6 7
| public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigMain.class); OrderBiz bean = applicationContext.getBean(OrderBiz.class); bean.doSomething(1, 3); }
|
代码执行结果:
1 2 3 4 5 6 7 8
| 20:12:44,753 INFO [main] (RzLogger.java:12) - Around开始 execution(void learnJava.spring.sprz05.OrderBiz.doSomething(int,int)) 20:12:44,758 INFO [main] (RzLogger.java:12) - 方法开始执行.... 4 20:12:44,773 INFO [main] (RzLogger.java:12) - Around结束 20:12:44,773 INFO [main] (RzLogger.java:12) - 方法执行完成.... 20:12:44,773 INFO [main] (RzLogger.java:12) - 方法执行结束返回数据....
|