zoukankan      html  css  js  c++  java
  • spring AOP 01

    AOP面向方面/面向切面变成

    AOP将分散在系统中的功能块放到一个地方- 切面

    可以声明式的定义何时何地应用这些功能,而不是在需要新功能的地方修改代码

    好处
    每个业务逻辑放在一个地方,不是分散到代码各个角落。业务模块只包含核心功能,辅助功能转到切面中,使其更加清晰。
    关注的是共同处理。通过spring配置把某个作用应用到多个点上。提高灵活性

    重要术语
    切面(Aspect):就是你要实现的交叉功能---共通业务处理可以被切入到多个目标对象。并且多次使用
    连接点(Joinpoint):应用程序执行过程中插入切面的地点
    通知(Advice):通知切面的实际实现
    切入点(Pointcut):定义通知应用在哪些连接点---连接点的集和
    目标对象(Target Object):被通知的对象,也就是目标对象
    代理(Proxy):将通知应用到目标对象后创建的对象---AOP中容器返回的对象是代理对象。用户在使用的时候,由代理对象调用切面组件和目标对象的功能
    织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程


    我们进入案例01---需要引入额外jar包,这点要注意通过实验慢慢引入
    1:编写dao类用来进行正常的增删改查
    2:编写切面用于共同业务处理---记录日志
    3:编写我们的xml文件
    <aop:config>
    <aop:pointcut id="userPointCut"
    expression="execution(* com.wode.service.UserService.add(..))" />
    <aop:aspect id="logAspect" ref="userLogger">
    <aop:before method="testLogger" pointcut-ref="userPointCut"></aop:before>
    </aop:aspect>
    </aop:config>

    重要概念:
    <aop:config>---指的是需要进行AOP配置了

    <aop:pointcut id="userPointCut"
    expression="execution(* com.wode.service.UserService.*(..))" />----设置切入点
    expression这个用于设置规则
    execution--具体规则类容 我们现在设置的就是不用管返回值+包类.*(所有方法)不限定参数类型
    我们可以做这样的实验
    01:expression="execution(* com.wode.service.UserService.delete(..))"
    02:expression="execution(void com.wode.service.UserService.*(..))" />
    03:<aop:pointcut id="userPointCut" expression="execution(* com.wode.service.impl.UserServiceImpl.user*(..))"/>
    看看有什么不一样
    这里是使用的切入点表达式我们可以看一下规则-参考网站可以参照一下表达式.txt从网上下载的
    注意我们还可以使用一种within的方式
    within用于匹配指定类型内的方法执行--这里和上边对应上边用于指定方法(更灵活)
    例如<aop:pointcut id="userPointCut" expression="within(com.wode.service.UserService)" />和上边的就一个意思
    within(com.wode.service.*)---包下边所有的方法
    within(com.wode.service..*)这样写的话就包括了子包

    <aop:aspect>--用于配置切面
    id---起id名称
    ref--指向我们的切面文件
    <aop:before method="testLogger" pointcut-ref="userPointCut"></aop:before>--指定方法以及在什么时候发生以及他的切入点

    注意除了aop:before是指在之前发生,这里总共有这么多类型可以让我们选择

    默认提供通知类型
    <aop:before>---前置通知
    <aop:after-returning>方法调用之后,但是如果有异常将不通知
    <aop:after>最终通知
    <after-throwing>方法调用发生异常之后
    <aop-around>环绕通知,也就是方法之前和之后

  • 相关阅读:
    poj 3666 Making the Grade
    poj 3186 Treats for the Cows (区间dp)
    hdu 1074 Doing Homework(状压)
    CodeForces 489C Given Length and Sum of Digits...
    CodeForces 163A Substring and Subsequence
    CodeForces 366C Dima and Salad
    CodeForces 180C Letter
    CodeForces
    hdu 2859 Phalanx
    socket接收大数据流
  • 原文地址:https://www.cnblogs.com/loongss/p/5774855.html
Copyright © 2011-2022 走看看