SpringAOP原理图解

本文深入研究Spring AOP机制,通过源码分析,总结并绘制了AOP代理类创建及目标方法执行切面过程的流程图。同时,提供了具体代码示例,展示了如何使用@Aspect、@Pointcut、@Before等注解实现AOP功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近重温研究下spring,根据源码画成流程图作为总结。因spring源码中各种判断语句各种神操作,所以我主要按照主流程总结画 的图,细节大多省略,目的是能掌握理解springAOP代理类的创建过程(普通Bean创建也是按照这种方式大同小异),以及aop生成代理类执行目标方法时中间所需要的增强器调用过程。其实从图里也大致能明白bean创建的生命周期了。下面流程图针对的是单例的bean。

AOP代理类的创建:

目标方法执行切面过程:

贴出我在跟源码时的代码例子:

//业务bean:
@Component
public class MyAopBean {

	public int demo(int x,int y){
		return x/y;
	}
}
//测试类
@Test
	public void test() {
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AopBeanConfig.class);
		MyAopBean myAopBean = (MyAopBean) ctx.getBean("myAopBean");
		myAopBean.demo(4, 2);
		ctx.close();
    }
//AOP
@Aspect
public class LogAop {

	@Pointcut("execution(public int com.spring.bean.MyAopBean.*(..))")
	public void ponitCut(){}
	
	@Before(value = "ponitCut()")
	public void logBefore(JoinPoint joinPonit){
		System.out.println("@Before..."+joinPonit.getSignature().getName()+"..."+joinPonit.getArgs());
	}
	@After(value = "ponitCut()")
	public void logAfter(JoinPoint joinPonit){
		System.out.println("@After..."+joinPonit.getSignature().getName()+"..."+joinPonit.getArgs());
	}
	@AfterReturning(value = "ponitCut()",returning="result")
	public void logReturning(Object result){
		System.out.println("@AfterReturning..."+result);
	}
	@AfterThrowing(value = "ponitCut()",throwing="exception")
	public void logThrowing(Exception exception){
		System.out.println("@AfterThrowing..."+exception);
	}
}
//注解配置类
@Configuration
@EnableAspectJAutoProxy
public class AopBeanConfig {
	@Bean
	public MyAopBean myAopBean(){
		return new MyAopBean();
	}
	
	@Bean
	public LogAop logAop(){
		return new LogAop();
	}
}

spring的流程太多了,上面这2图只是一个简单主流程。个人觉得最好亲自去跟跟源码。边跟源码边画这2图真不容易。。。还好坚持画完了虽然有点难看,如有错误,恳请指点。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值