- 后置通知
(在一个方法执行之后,不考虑其结果,执行通知)
- 环绕通知
(在建议方法调用之前和之后,执行通知)
- 内容
- 注意事项
(原始操作的调用 :方法调用的位置)
- 获取签名
- 返回后通知
(在一个方法执行之后,只有在方法成功完成时,才能执行通知)
- 抛异常通知
(在一个方法执行之后,只有在方法退出抛出异常时,才能执行通知)
6.AOP通知获取数据
- 获取数据的类型
2. 获取参数
- 获取返回值
- 获取异常
7.AOP案例-百度网盘密码数据兼容处理
- 需求分析(在验证提取码访问链接之前,对复制的提取码后面多余的空格进行预处理)
2. 基础代码简介
(具体代码见respr_case_handle_password模块)
- ResuorcesService接口:
模拟接收地址和提取码,打开一个资源
public interface ResourcesService { public boolean openURL(String url ,String password); }
- ResourcesServiceImpl实现类
实现接口,返回数据层相关处理函数的结果return resourcesDao.readResources(url,password)
@Service public class ResourcesServiceImpl implements ResourcesService { @Autowired private ResourcesDao resourcesDao; public boolean openURL(String url, String password) { return resourcesDao.readResources(url,password); } }
- ResourcesDao数据层接口,接收地址和验证码参数
public interface ResourcesDao { boolean readResources(String url, String password); }
- ResourcesDaoImpl实现类,对提取码进行模拟验证
@Repository public class ResourcesDaoImpl implements ResourcesDao { public boolean readResources(String url, String password) { //打印输出预处理完后提取码的长度 System.out.println(password.length()); //模拟校验 return password.equals("root"); } }
- 模拟测试类App进行测试,提取码验证通过输出打印true,否则输出打印false。由于传入的验证码“root ”带有空格,所以需要通过AOP编程思想对传入的参数进行预处理。
public class App { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); ResourcesService resourcesService = ctx.getBean(ResourcesService.class); boolean flag = resourcesService.openURL("http://pan.baidu.com/haha", "root "); System.out.println(flag); } }
- 在aop包下创建并编写通知类DataAdvice
@Component @Aspect public class DataAdvice { @Pointcut("execution(boolean com.itheima.service.*Service.*(*,*))") private void servicePt(){} @Around("DataAdvice.servicePt()") public Object trimStr(ProceedingJoinPoint pjp) throws Throwable { Object[] args = pjp.getArgs(); for (int i = 0; i < args.length; i++) { //判断参数是不是字符串 if(args[i].getClass().equals(String.class)){ args[i] = args[i].toString().trim(); } } Object ret = pjp.proceed(args); return ret; } }
- 在congfig包下的springConfig配置类中开启AOP注解支持
@Configuration @ComponentScan("com.itheima") @EnableAspectJAutoProxy public class SpringConfig { }
- 模拟测试类的运行结果
8.AOP总结
- 核心概念
- 切入点表达式
- 通知类型
- 获取切入点中的参数
`博客内容借鉴了bilibili黑马程序员SSM课程资料,如有侵权,请联系作者删除`
总结
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。