一、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. pv-date-handle

    pv-date-handle 这是一个时间格式化转换的小工具,简单易用 ## 快速开始 安装`npm install pv-date-handle -S` ```js import formateDa ...

  2. Hibernate (ORM)

    1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...

  3. React Native之React速学教程(中)

    概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...

  4. Spark企业级应用开发和调优

    1.Spark企业级应用开发和调优 Spark项目编程优化历程记录,主要介绍了Spark企业级别的开发过程中面临的问题和调优方法.包含合理分配分片,避免计算中间结果(大数据量)的collect,合理使 ...

  5. CFileDialog 多文件选择

    CString pathName = _T(""); CString fileName = _T(""); CString strMulfilepath = _ ...

  6. androidcoookie

    https://segmentfault.com/a/1190000002877843 目前在操作登录的coookie,js和原生

  7. xlwings: Write Excel macro using python instead of VBA

    i want to write Excel macros to deal with the data, but i am not familiar with VBA language. so i de ...

  8. Python学习---Python下[字典]的学习

    Python中唯一的映射类型(哈希表)       -->Java中的HashMap<K,V> Python对key进行了哈希函数运算,根据计算的结果决定value的存储地址,所以字 ...

  9. HTTP常用状态码大全

    HTTP状态码对照表 HTTP response codes 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码 ...

  10. SAP Fiori + Vue = ?

    2017年3月28日,我到国内一个SAP CRM客户那里,同他们的架构师关于二次开发的UI框架选择SAP UI5还是Vue进行了一番探讨.回到SAP研究院之后,我把这个问题扔到了公司的微信群里,引起了 ...