一、什么是AOP
AOP:大体可以理解为面向切面编程,详解可以百度:https://baike.baidu.com/item/AOP/1332219?fr=aladdin
二、AOP是基于什么实现的
AOP是基于动态代理实现的,而动态代理可以理解为动态执行方法,动态加载类。
三、AOP在ssm框架中是如何执行的,怎么使用的反射机制
我在我的项目业务层增加了一个空指针异常,来查看ssm框架如何调用



从异常抛出的顺序来看,可以得到ssm框架的运行顺序

1.请求发送过来后,服务器线程池发配一个线程处理请求
2.过滤器拦截请求对请求进行判断和过滤
3.经过过滤器的请求经过来到DispatherServlet主控制器,并根据域名找到应当执行的控制器,并用反射来执行控制器
4.控制器调用com.sun.proxy.$Proxy——也即是动态代理(aop底层就是用动态代理和反射实现的)
5.aop通过反射调用业务层方法,发现了空指针异常。
四、AOP内部执行顺序以及注解
概念:
1.目标方法:被AOP拦截的业务方法,称为目标方法。
2.注解:@Before,@After,@Afterthrowing,@AfterReturning,@Around
@Before注解:在业务方法之前执行,也就是说在业务层之前执行
@After注解:在业务方法之后执行,也就是在业务层之后执行
案例:
aop:

业务层:

启动tomcat后执行顺序为:
Hello world——>login——>After
@AfterReturning与@AfterThrowing
这两个注解顾名思义,配合try-catch执行,不过try-catch被aop所封装
案例:

执行顺序:

(1)如果没有异常,则控制器调用aop,先执行@Before,之后调用业务方法,再调用AfterReturning,最终调用After。
显示顺序:hello world——>login——>After——>AfterReturning
显示顺序虽然after是先于AfterReturning之前调用,这是spring做了一些机制处理,将After再AfterReturning之前调用,如果想要按照正常try-catch顺序进行,要使用@Around注解
(2)有异常,则顺序为:@Before——>业务层——>@AfterThrowing——>@After
显示顺序:hello world——>login——>AfterThrowing——>After
@Around注解(环绕通知)
环绕通知:再业务方法前后调用
执行顺序


其中return val返回值会将值赋给Contrller中的User对象,然后将Controller返回给浏览器。
我们可以再return val这里做手脚,如上上图,抛出异常,或者返回一个别的值,干预业务方法的返回结果。
事务控制:aop的延申适用,对jdbc的事务处理进行封装
要想要@Transactional生效,需要配置事务管理器:TransactionalManager
五、aop的切入点
bean与within:
注意:aop不要到处拦截,一般用于拦截业务层

本文详细介绍了AOP(面向切面编程)的概念,包括基于动态代理的实现方式,SSM框架中AOP的执行过程以及如何利用反射机制。文章探讨了AOP在SSM中的执行顺序,讲解了@Before、@After、@AfterReturning、@AfterThrowing和@Around注解的用法,并特别讨论了事务控制作为AOP的一个应用实例。同时,还阐述了AOP的切入点选择,强调应避免过度拦截。
9万+

被折叠的 条评论
为什么被折叠?



