Spring框架使用03

1 Spring容器目前所学内容的好处

    降低偶合度(Spring容器+面向接口编程)

2 面向AOP切面编程引入

    1) 代理:1代理对象必须和被代理对象有相同的方法。2代理对象除了做被代理者核心业务之外还要做其他额外操作

    2)静态代理:
把事务从service层中提取出来,降低了耦合,易于扩展。

优点:低耦合

缺点:1 静态代理一个代理只能代理一个类

      2 一个代理中重复代码太多,不能复用

  3)动态代理:

1 JDK提供

  优点:1延续动态代理的优点

    2 代码重用,一个动态代理类,可以为多个service生成代理对象

   缺点:1必须要求被代理类有接口

     2 代理类中的方法是统一添加了事务或者权限控制代码,不容易进行方法的过滤

2 Spring提供的CGLib

优点:1)延续JDK动态代理的优势

   2)不需要有接口

缺点:代理类中的方法是统一添加了事务或者权限控制代码,不容易进行方法的过滤

3 Spring框架提供的AOP

切面(Aspect):实际指的是一个类,做特定业务的类(事务切面、权限控制切面、日志等)

  连接点(joinpoint):指的是目标类中的各个方法

  通知(Advice):切面中的各个方法

  切入点(Pointcut):决定是否执行连接点的规则

  目标对象(Target Object):被代理的对象

  AOP代理:代理对象

  织入(Weaving):把切面添加到业务中的一个过程

通知类型:

   前置通知,后置通知,环绕通知,异常通知,最终通知

4 SpringAOP实现过程

  1)导入jar包

  2)创建事务切面类

  3)在切面中添加通知方法(也就是事务切面的方法)

 

 

 例:添加环绕通知(连接点之前之后添加内容,还可以控制连接点是否执行)

 public void around(proceedingJoinPoint joinPoint){

开启事务切面方法

执行连接点的代码(即代理类中的方法)

joinPoint.proceed();

提交事务切面的方法

}

  4)创建连接点(目标类中创建)

  例如:Userservice层中saveUser方法

  5)xml配置文件中添加AOP约束文件,并配置切面

如:

<!--配置aop-->
<aop:config>
 <!--配置切入点(即是否执行连接点)service下所有类的所有方法-->
<aop:poincut expression="within(cn.tedu.service.*)" id="ps"/>
<!--/配置切面-->
<aop:aspect id="asp" ref="txAspect">
<!--配置切面中的通知-->
<aop:around method="around" ponintcut-ref="pc"
</aop:aspect>
</aop:config>

5 为什么要用Spring的Aop

 如果直接将处理事务的,权限控制的等代码写入service中,耦合度太高且不易于维护,代码重复太多,降低复用性。使用静态代理解决了耦合度这一问题,但复用性问题没解决。然而使用JDK动态代理,虽然解决了复用性问题,但是要求此类必须有接口。随后使用Spring框架的CGLib动态代理解决了必须要求接口问题,但又解决不了进行目标方法的过滤。然而Spring框架的AOP通过切入点可以进行目标方法的过考虑。此为优啊!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值