一、aop的简介

aop:面向切面编程
    aop是一种思想,面向切面编程思想,Spring内部提供了组件对aop进行实现
    aop是在运行期间使用动态代理技术实现的思想
    aop是oop延续
        面向过程:C
        面向对象:Java
        面向切面:AOP
        面向服务架构:SOA
        
    aop的底层实现:动态代理
        基于JDK:目标对象必须有接口(proxy是接口的实现)
        基于cglib:目标对象不需要有接口(proxy是目标子类)
        
        
    aop的基本概念、术语
        目标对象(target)
        代理对象(proxy)
        连接点(joinpoint): 可以被增强的方法
        切(入)点(pointcut): 真正可以被增强的方法
        增强/通知(advice):功能增强的方法
        切面(aspect):切点+增强
        织入(weaver):将切点和增强结合的过程

二、基于xml方式的aop配置

开发步骤:
        1、导入aop的jar
            spring-aop-4.2.4.RELEASE            spring的aop核心包
            spring-aspects-4.2.4.RELEASE        spring的切面包
            com.springsource.org.aopalliance-1.0.0    aop联盟包
            com.springsource.org.aspectj.weaver-1.6.8.RELEASE     aspectj的织入包
            
        2、定义目标(目标内部有切点)、定义切面(增强在切面内部)
            public class Target implements TargetInterface
            public class MyAspect
        3、配置目标和切面到spring容器中
            <!-- 配置目标 -->
            <bean id="target" class="com.ghdu.aop.Target"></bean>
            <!-- 配置切面 -->
            <bean id="myAspect" class="com.ghdu.aop.MyAspect"></bean>
        4、配置aop的织入
            导入aop的命名空间
            
    xml配置代码:
        <!-- 配置目标 -->
        <bean id="target" class="com.ghdu.aop.Target"></bean>
        <!-- 配置切面 -->
        <bean id="myAspect" class="com.ghdu.aop.MyAspect"></bean>
        
        <!-- 配置aop的织入 -->
        <aop:config>
            <!-- 指定切面对象是谁 -->
            <aop:aspect ref="myAspect">
                <!-- 切面=切点+增强 -->
                <!-- 细节2:切点表达式的写法
                        expression写法
                        示例:execution(public void com.ghdu.aop.Target.show())
                        语法:execution([访问修饰符] 返回值  包.类.方法(参数类型列表))
                        
                        注意:其中
                            访问修饰符可以省略
                            返回值、包、类、方法 可以使用*作为通配符代表任意
                            参数类型列表 可以使用..作为通配符代表任意
                            
                        示例:
                            * com.ghdu.service.impl.CustomerServiceImpl.*(..)  CustomerServiceImpl的任意方法
                            * com.ghdu.service.impl.*.*(..)    对impl包下的任意类的任意方法
                            * com.ghdu.service.*.*.*(..)        对service包下的任意子包下的任意类的任意方法
                            * com.ghdu.service..*.*.*(..)    对service包下的任意后代包下的任意类的任意方法
                            
                        
                 -->
                <!-- <aop:pointcut expression="execution(public void com.ghdu.aop.Target.*(..))" id="myPointcut"/>
                <aop:pointcut expression="execution(public void com.ghdu.aop.Target.show(..))" id="myPointcut2"/> -->
                <!-- 细节1:aop的增强/通知有哪些
                        aop:before    前置增强
                        aop:after-returning        后置增强
                        aop:around    环绕增强
                        aop:after-throwing    异常抛出增强
                        aop:after    最终增强
                 -->
                <!-- <aop:before method="before" pointcut-ref="myPointcut"/>
                <aop:after-returning method="afterReturning" pointcut-ref="myPointcut"/>
                <aop:around method="around" pointcut-ref="myPointcut"/>
                <aop:after-throwing method="afterThrowing" pointcut-ref="myPointcut"/>
                <aop:after method="after"  pointcut-ref="myPointcut2"/> -->
                
                <aop:around method="around" pointcut="execution(* com.ghdu.aop.*.*(..))"/>
                <aop:after method="after" pointcut="execution(* com.ghdu.aop.*.*(..))"/>
                
            </aop:aspect>
        </aop:config>

三、基于注解方式的aop配置

开发步骤:
        1、导入aop的jar
            spring-aop-4.2.4.RELEASE            spring的aop核心包
            spring-aspects-4.2.4.RELEASE        spring的切面包
            com.springsource.org.aopalliance-1.0.0    aop联盟包
            com.springsource.org.aspectj.weaver-1.6.8.RELEASE     aspectj的织入包
            
        2、定义目标(目标内部有切点)、定义切面(增强在切面内部)
            public class Target implements TargetInterface
            public class MyAspect
        3、配置目标和切面到spring容器中
            @Component("target")
            public class Target implements TargetInterface
            
            @Component("myAspect")
            public class MyAspect
            
            
            
        4、配置aop的织入
            @Component("myAspect")
            //<aop:aspect ref="myAspect">
            @Aspect
            public class MyAspect {

//<aop:before method="before" pointcut="execution(* com.ghdu.aop.*.*(..))"/>
                //@Before("execution(* com.ghdu.anno.*.*(..))")
                public void before(){
                    System.out.println("前置增强....");
                }
            
            注意:
                在配置文件中配置aop的自动代理
                <!-- 开启aop的自动代理 -->
                <aop:aspectj-autoproxy/>

  

全注解: 在原始注解的基础上,创建配置类

  //声明
  @Configuration

  //扫描包
  @ComponentScan("com.gudf.allanno")

  //设置aop自动代理
  @EnableAspectJAutoProxy
  public class SpringConfiguration {
  }

有关aop的知识扩充

aop的底层实现

aop、spring、aspectj三者的关系

动态代理

全盘委托机制

aop应用场景

方法性能测试
日志控制
事务控制......

Spring知识点小结(三)的更多相关文章

  1. Spring知识点小结(二)

    一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源:        导入dbcp的jar包:dbcp+pool+connector                代码实现:  ...

  2. Spring知识点总结(三)之注解方式实现IOC和DI

        1. 注解概念        所谓注解就是给程序看的提示信息,很多时候都用来作为轻量级配置的方式.        关于注解的知识点,参看java基础课程中java基础加强部分的内容.    2 ...

  3. Spring知识点小结(一)

    一.Spring的简介 1.spring是一个full-stack轻量级开源框架    2.spring的两大核心        IoC: inverse of control  控制反转:反转是对象 ...

  4. Hibernate知识点小结(三)-->一对多与多对多配置

    一.多表关系与多表设计 1.多表关系        一对一:            表的设计原则(分表原则):                优化表的性能                基于语意化分表 ...

  5. Spring知识点小结汇总

    Spring部分 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控 ...

  6. Spring知识点小结(四)

    一.JdbcTemplate(jdbc模版--抽取的工具) web阶段DBUtils:        QueryRunner runner = new QueryRunner(dataSource); ...

  7. Spring知识点总结(三)之Spring DI

    1. IOC(DI) - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和 ...

  8. Struts2知识点小结(三)--值栈与ognl表达式

    1.问题一 : 什么是值栈 ValueStack        回顾web阶段 数据交互问题?        客户端提交数据  到  服务器端    request接受数据+BeanUtils实体封装 ...

  9. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

随机推荐

  1. jQuery filter() , end()

    1. jquery filter(condition) :  过滤指定对象中符合条件的元素: 2.  jquery  end() : 回到原来的操作对象 3.  example : <body& ...

  2. 移动web中的幻灯片切换效果

    百度或者谷歌下类似的插件有很多,原理都差不多,关键适合自己的项目,如果移动端要引入jquery这么大的插件,只能呵呵了.... 下面是工作中针对webkit内核的浏览器写的,html很简单: < ...

  3. 原生js模拟jquery写法

    function $_custom(fun) { document.onreadystatechange = function() { if (document.readyState == " ...

  4. layui-学习03-页面元素

    布局: 相关样式: 包裹层 : layui-container ( 响应式 宽度 ) layui-fluid ( 100% 宽度 )行        : layui-row列        : lay ...

  5. SQL Server中建立自定义函数

    在SQL Server中用户可以自定义函数,像内置函数一样返回标量值,也可以将结果集用表格变量返回.用户自定义函数的2种类型:1.标量函数:返回一个标量值:2.表格值函数{内联表格值函数.多表格值函数 ...

  6. GTX650Ti,GT610安装黑苹果之经验与步骤

    安装这两个显卡的黑苹果都是10.9以上的版本,一个是10.9.2,一个是10.9.4,最后都完美.主板一个是Z77,一个是H61. 1. 开始安装完以后,显卡不工作,能够安全模式进去. 2. 删除Ap ...

  7. MVC Dropdownlist数据绑定 默认值

    @Html.DropDownList("Data", (SelectList)ViewBag.Data, new { @class = "form-control cho ...

  8. AppDomain配置和卸载

    AppDomain 1.配置AppDomain 使用AppDomainSetup类为新应用程序域提供带有配置信息的公共语言运行时.创建自己的应用程序域时,最重要的ApplicationBase(它是定 ...

  9. 为某个云服务设置RVIP

    获取所有Azure(云)服务Get-AzureService #查看某个云服务的LocationGet-AzureService -ServiceName tests |select location ...

  10. Elasticsearch 2.x.x版本如何安装bigdesk

    ES插件BigDesk安装 bigdesk支持的最新版本的ES是1.3.0 ... 1.3.x 然而想要在新版本ES上安装(2.x.x),项目中遇到过一些BUG,在ES在最新版本中有修复,所以采用了2 ...