一、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. 52张扑克牌快速生成js

    function* generatePoker() { const points = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']; yield* ...

  2. 在IIS中浏览网站时出现:无法打开登录所请求的数据库 "***",登录失败

    在IIS中发布Web应用程序后,浏览网站时出现无法打开登录所请求的数据库 "***",登录失败错误,如下图所示: 解决办法:打开系统Web.Config配置文件,查看数据库连接串是 ...

  3. CentOS 7运维管理笔记(5)----源代码安装Apache 2.4,搭建LAMP服务器

    ##########################    2016-07-07-Thu--20:34 补充 ##################### 编译安装OpenSSL笔记: 如果系统要使用 ...

  4. SharePoint 2013 - Host-named Site Collection

    1. 详细操作可参考此文章 的 Deployment and configuration for host-named site collections区域,简单来说,需要以下三行PowerShell ...

  5. 微软与Node.js的开源之旅

    微软近年来在开源领域可谓是大刀阔斧的前进中,继2015年微软与红帽合作,微软智能云Azure与Linux进一步融合等举措之后,2016年,微软继续加大开源之举,大力推进Node.js的开发和开源社区的 ...

  6. 【Leetcode】【Medium】Find Peak Element

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  7. Python学习---远程执行命令

    原则:发送一个接受一个 原理:发送执行命令的大小给客户端,客户端根据接受的大小判断是否全部接收了服务器sendall()发送的全部 利用send发送的全部数据都是bytes类型的,需要进行字符编码的转 ...

  8. Ubuntu双系统安装过程中遇到的问题

    1.在第六步选择时区的时候,会报错,这时候可以选择断开网络(取消右上角的网络选项)! 2.用easybcd添加启动项以后,无法进入,F12进入BIOS,选择Ubuntu进入,因为以前的BIOS BOO ...

  9. liunx screen使用简单实验

    liunx screen使用 今天因工作需要使用到screen工具,感觉挺有意思,记录一下 GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地 ...

  10. 在Windows 10上部署Apache PredictionIO开发环境

    Windows在初研究人员的探索下,研究出了一套更为精简的环境配置,极大的缩短了开发时间与效率,在此总结以供后来者参阅. 1.部署环境的配置 Windows10 64 home IntelliJ ID ...