一、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. linux 下解决git clone报错

    解决报错:error: The requested URL returned error: 401 Unauthorized while accessing   问题报错:error: The req ...

  2. GDAL安装和使用

    1.安装 下载源程序包 ,解压,运行以下三条命令 ./configure --prefix=~ make make install

  3. 【Python】回文palindrome——利用字符串反转

    回文 palindrome Python 字符串反转string[::-1] Slice notation "[a : b : c]" means "count in i ...

  4. VS2015开发环境的搭建

    下面我教大家如何搭建VS2015 [环境]我的环境WIN8.1专业版(Ghost) [过程] [1]打开我们的附件vs2015.ent_chs.iso然后我们会进入到这个ISO文件中(windows版 ...

  5. Hadoop Archives档案

    HDFS 并不擅长存储小文件,因为每个文件最少一个 block,每个 block 的元数据都会在 NameNode 占用内存,如果存在大量的小文件,它们会吃掉NameNode 节点的大量内存. Had ...

  6. MVC5中Model设置属性注解

    ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...

  7. DedeCms织梦后台管理员密码修改和忘记重置方法

    方法/步骤 打开dede_admin数据表: 进入你的MYSQL后台,然后在你的数据库名中,找到dede_admin这项如图,pwd下的值就是你的密码,织梦密码采取的是MD5加密,破解麻烦而且没有必要 ...

  8. 在windows平台上构建自己的PHP(php5.3+)

    这是一篇翻译的文章,原文参见:https://wiki.php.net/internals/windows/stepbystepbuild 顺便提一句,wiki.php.net有很多精彩的内容,想深入 ...

  9. EOF及相关函数

    结论:EOF是在头文件stdio.h中预定义的一个宏,而eof(end of file)是一个与标准输入/输出流相关联的标志位.当文件指针已经指向文件尾且再次尝试读取时,eof标志会被设置.同时,某些 ...

  10. 移动端 html基值(转载)

    (function () { document.addEventListener('DOMContentLoaded', function () { var html = document.docum ...