Spring学习笔记-04.Spring AOP的使用

付威     2019-11-23   1869   5min  

AOP的使用


所谓AOP的思想是现在程序设计中常用的一种设计思想,主要是为了能够更好的监控程序的运行的情况。 在Spring中AOP的思想展现的淋漓尽致。

实现一个简单的AOP。

@Component
public class OrderBiz {
	
	public void doSomething(int x, int y) {
		System.out.println(x + y);
	}
}

增加一个AOP的类:

@Aspect
public class LogAspector {

	//此处是一个入口,定义为OrderBiz的所有方法
	@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;
	}
}
@Configuration
@EnableAspectJAutoProxy //不可缺少
public class ConfigMain {

	@Bean
	public OrderBiz getOrderBiz(){
		return new OrderBiz();
	}
	
	@Bean
	public LogAspector getLogAspector(){
		return new LogAspector();
	}
}


主方法的调用

	public static void main(String[] args) {
		
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigMain.class);
		OrderBiz bean = applicationContext.getBean(OrderBiz.class);
		bean.doSomething(1, 3);
		
	}

代码执行结果:

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) - 方法执行结束返回数据....

(本文完)

作者:付威

博客地址:http://blog.laofu.online

如果觉得对您有帮助,可以下方的RSS订阅,谢谢合作

如有任何知识产权、版权问题或理论错误,还请指正。

本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证

交流请加群113249828: 点击加群   或发我邮件 laofu_online@163.com

付威

获得最新的博主文章,请关注上方公众号