达内云笔记(二) AOP面向切面编程

本文介绍了AOP(面向切面编程)的概念及其在软件开发中的应用,对比了AOP与Filter、拦截器的区别,并详细解释了AOP的配置方式、通知类型及切入点表达式。此外还介绍了AOP的工作原理,包括注解解析、Spring AOP实现机制以及动态代理技术的应用。

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

AOP 面向切面编程,也称为横截面编程,其实类似于Filter和拦截器。Filter和拦截器也是横截面编程,即类似切了一刀,然后搞完一端再搞另一端。

而Filter 和 拦截器 是用于处理Web请求的“横截面拦截”编程,在云笔记和项目中有登录,html,*.do,业务层和持久层。Filter和拦截器用于拦截html和*.do的切面。AOP用于业务层的编程。


AOP的优点:

在不改变原有业务情况下,为软件灵活扩展功能。即在保留目前功能的情况下再加其他功能,不改变原有代码。在多个业务层控制器中,难免有公用的功能。而AOP提供了动态调用业务方法。在控制器和业务层放入切入点,当切入点触发事件时,调用容器中的切面bean。


导入jar包:  

        
            org.aspectj
            aspectjweaver
            1.8.0
        
        
            org.aspectj
            aspectjtools
            1.8.0
        
        
            org.aspectj
            aspectjrt
            1.8.0
        

配置:

    
	
	
	


通知(切入点表达式):

@Aspect 标注在类之上 声明切面

@Before("bean(xxxxx)") 标注在方法之上    声明通知和切入点      “bean(xxx)“为切入点,即为在xxx的全部方法之前执行方法

@AfterReturing 在切入点正常执行完成后执行,如果切入点抛出异常,则不执行

@AfterThrowing 在切入点抛出异常后执行

@After 类似final 不管是否有抛出异常都在最后执行

@Around 类似Servelt Filter 既可以在方法前又可以在方法后 使用该通知需要传入参数"ProceedingJoinPoint",类似chain.do,ProceedingJoinPint(jp)也有一核心方法proceed(),即调用目标的业务方法(利用反射实现invoke()),适用于性能测试(时间),配合jp.signature()来获取方法名。不写try catch,返回.proceed()的返回值


切入点表达式:
1.类级别
 - within(包名)
2.对象级别
 - bean(userService)
 - bean(userService) || bean(noteService)
 - bean(*Service)
3.方法级别
 - execution(* cn.tedu.note.service.UserService.login(..)) 参数用".."表示 

Sun公司建议将包名,方法名和类名定制的有规律,便于使用切入点。

AOP的工作原理:
1.注解如何解析:利用反射解析注解
2.Spring AOP是利用AspectJ实现
3.AOP底层利用了动态代理技术
  - 如果被代理的位置有接口,则使用JDK动态代理
  - 如果被代理的位置没有借口,则使用CGLIB动态代理
  **建议AOP切入到有接口的位置,自动调用JDK动态代理
4.JDK动态代理是反射API的一部分
  - java.lang.reflect.Proxy

5.代理模式: 不改变原有类功能,为类的方法扩展功能


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值