Spring学习笔记(2)之Spring AOP

来源:互联网 发布:淘宝追加评价在哪 编辑:程序博客网 时间:2024/05/22 17:33

Spring AOP

AOP简介

1.        AOP(Aspect-OrientedProgramming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充.

2.        AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点.

3.        在应用 AOP 编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类. 这样一来横切关注点就被模块化到特殊的对象(切面)里.

4.        AOP 的好处:

1)        每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级

2)        业务模块更简洁, 只包含核心业务代码.

Spring AOP 使用

基于AspectJ注解

1.        加入 jar 包

1)        com.springsource.net.sf.cglib-2.2.0.jar

2)        com.springsource.org.aopalliance-1.0.0.jar

3)        com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

4)        spring-aspects-4.0.0.RELEASE.jar

2.        在 Spring 的配置文件中加入 aop 的命名空间

3.        基于注解的方式来使用 AOP

1)        基于注解的前提设置:在配置文件中配置自动扫描的包: <context:component-scan  base-package="com.atguigu.spring.aop"></context:component-scan>

2)        开启AspjectJ的注释功能:加入使 AspjectJ 注解起作用的配置

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>为匹配的类自动生成动态代理对象.

4.        编写切面类:即增强功能类

1)        创建一个增强功能的类

2)        在其中添加要额外实现的功能

5.        对切面类的配置

1)        添加Bean注解:切面必须是 IOC 中的 bean: 实际添加了 @Component 注解

2)        添加切面注解: 添加 @Aspect

3)        声明通知: 即额外加入功能对应的方法

6.        在通知中访问连接细节: 可以在通知方法中添加 JoinPoint(切入点)类型的参数, 从中可以访问到被增强方法的签名和方法的参数。

注:被增强类的方法对应的类必须面向接口编程。即通过接口规定方法,类实现这个接口。在使用时,处理在IOC或的Bean的实例时,其他地方都是用接口来引用。

 

7.        通知注解类型

1)        AspectJ 支持 5 种类型的通知注解:

a)        @Before: 前置通知, 在方法执行之前执行

b)        @After: 后置通知, 在方法执行之后执行

c)        @AfterRunning: 返回通知, 在方法返回结果之后执行

d)        @AfterThrowing: 异常通知, 在方法抛出异常之后

e)        @Around: 环绕通知, 围绕着方法执行


2)        前置通知:在被增强方法前执行

@Before("execution(public intcom.atguigu.spring.aop.ArithmeticCalculator.*(int, int))")

Ø  @Before 表示在目标方法执行之前执行 @Before 标记的方法的方法体.

Ø  @Before 里面的是切入点表达式

3)        后置通知:在被增强方法后执行,无论该方法是否抛出异常都会执行

@After("execution(* cn.itcast.spring.aop.before.BaseService.*(int,int))")

4)        返回通知:在方法法正常结束受执行的代码,返回通知是可以访问到方法的返回值的!


5)        异常通知:

Ø  在目标方法出现异常时会执行的代码. 可以访问到异常对象;

Ø   且可以指定在出现特定异常时在执行通知代码


6)        环绕异常(了解)

Ø  环绕通知需要携带ProceedingJoinPoint 类型的参数.

Ø  环绕通知类似于动态代理的全过程: ProceedingJoinPoint 类型的参数可以决定是否执行目标方法.

Ø  且环绕通知必须有返回值, 返回值即为目标方法的返回值

8.        指定切面优先级&使用切入点表达式

1)        @Order(val):val越小优先级越高越先执行。即在外层。

2)        @Pointcut:声明切入点表达式。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕6个月不想生怎么办 孕六个月不想要怎么办 怀孕9个月喝酒了怎么办 怀孕8个月喝醉了怎么办 怀孕6个月胃酸烧心怎么办 怀孕7个月胃酸怎么办 怀孕5个月胃酸怎么办 怀孕2个月胃酸怎么办 怀孕六个月胃酸烧心怎么办 孕六个月反胃酸怎么办 怀孕三个月胃酸吐酸水怎么办 孕六个月胃难受怎么办 孕6个月胃酸厉害怎么办 孕妇6个月胃酸怎么办 孕早期胎盘早剥怎么办 孕妇晕车怎么办最有效方法 怀孕了受凉胃疼怎么办 怀孕4个月胎位低怎么办 6个月胎位低怎么办 7个多月了胎位低怎么办 瑜伽按摩球破了怎么办 孕妇吐完胸口疼怎么办 孕25周胸口堵怎么办呢 孕期没做过产检怎么办 宝宝的泪囊堵塞怎么办 瑜伽球塞子丢了怎么办 瑜伽球塞子没了怎么办 练阴瑜伽是想睡怎么办 肠道引流拨断了怎么办 瑜伽动作做不到位怎么办 胃肠吸收不好一直长不胖怎么办 小孩把泡泡糖吞进肚子怎么办 练习瑜伽又?带硬怎么办 天气太热没有空调怎么办 腹股沟岔气怎么办才能快点好 瑜伽馆不给退卡怎么办 膝盖总是凉凉的怎么办 练阴瑜伽腿麻怎么办 瑜伽垫在地板滑怎么办 艾灸后后背发凉怎么办 床上老是有小蜈蚣怎么办