JavaEE 之 Spring(二)

1.AOP(面向切面编程)

  a.定义:AOP将分散在系统中的功能块放到一个地方——切面

  b.重要术语:

    ①切面(Aspect):就是你要实现的交叉功能---共通业务处理可以被切入到多个目标对象。并且多次使用

    ②连接点(Joinpoint):应用程序执行过程中插入切面的地点

    ③通知(Advice):通知切面的实际实现

    ④切入点(Pointcut):定义通知应用在哪些连接点---连接点的集和

    ⑤目标对象(Target Object):被通知的对象,也就是目标对象

    ⑥代理(Proxy):将通知应用到目标对象后创建的对象---AOP中容器返回的对象是代理对象。用户在使用的时候,由代理对象调用切面组件和目标对象的功能

    ⑦织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程

  c.配置XML

    <aop:config>
        <aop:pointcut id="userPointCut"
            expression="execution(* com.wode.service.UserService.*(..))" />
        <aop:aspect id="logAspect"  ref="userLogger">
            <aop:before method="testLogger" pointcut-ref="userPointCut"></aop:before>
        </aop:aspect>    
    </aop:config>

 

  d.通知类型:

    ①<aop:before>——前置通知

    ②<aop:after-returning returning="test">——方法调用之后,但是如果有异常将不通知

    ③<aop:after>——最终通知

    ④<aop:after-throwing throwing="e">——方法调用发生异常之后

    ⑤<aop:around>——环绕通知

 

  e.ProceedingJoinPoint——环绕通知的形参

public void testLogger(ProceedingJoinPoint pjo){

    Object obj=pjo.proceed();    //放行,obj为返回值

    System.out.println(pjo.getTarget());    

    System.out.println(pjo.getArgs()[0]);    //获取形参

    System.out.println(pjo.getSignature().getName());    //获取方法名

    System.out.println(pjo.getTarget().getClass().getName());    //获取类名

}

 

  f.福利

    ①在xml中书写

  <aop:aspectj-autoproxy />

    ②使用注解

    @Component("userLogger")
    @Aspect

    ③定义切入点

    @Pointcut("within(com.wode.service.UserService)")
    public void pointCut(){}

    ④设置

    @Before("pointCut()")
    public void testLogger() throws Throwable{
        System.out.println("前置记录日志");
    }

 

转载于:https://www.cnblogs.com/vettel0329/p/6544723.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值