MVC AOP 10火推

来源:互联网 发布:法律面前人人平等 知乎 编辑:程序博客网 时间:2024/05/18 15:27
1.什么是AOP
  Aspect  Oriented  Programming    面向切面编程 
    可以在不修改源代码的情况 对原有的组件 增加功能
  OOP   Object  Orientied  Programming   面向对象编程
    面向对象的核心是 对象    面向切面的核心是切面 是对面向对象的扩展 
2.Spring AOP 中核心组件 
  ##Aspect   共通的业务逻辑  可以把这个逻辑功能切入到多个对象的方法上 
  Join Point  连接点   表达一个位置 这个位置上要加切面功能 
  ##Pointcut    切入点   一堆连接的点的集合   后面会讲使用表达式把切点表达出来 
  Target    目标对象 
  Proxy     代理     AutoProxy  自动生成的代理 
      java jdk 的代理  和  CGLIB 的代理 
  ##Advice  通知    
            方法的切入时机       add    update   get   
             时机   调用之前 调用之后  调用前后   抛出异常   最终执行
3.在service 的方法执行之前  切入一个输入 横线的功能
  3.1 建立一个 Spring 的项目   拷贝 配置文件  和 jar包(ioc  和 aop )
  3.2 建立一个service 类 和  切面类
  3.3 在配置文件中  启动组件扫描 
      把Service 对象 注入到 Spring 容器 
      
4.切入点表达式的写法 
 within 类型限定表达式 
     com.xdl.service  这个包下所有类型 不包括子包
     expression = "within(com.xdl.service.*)"
     com.xdl.service  这个包直接子包下的类型  
     expression = "within(com.xdl.service.*.*)" 
      com.xdl.service  这个包和子包下的类型  
     expression = "within(com.xdl.service..*)" 
     com.xdl.service  这个包下所有类型 包括直接子包  和 非直接子包  
     expression = "within(com..*.*)"  
 execution  方法限定表达式 
     expression = "execution([修饰权限] 返回值  方法名(参数列表) [异常抛出])"
     com.xdl.service.EmpService 这个类中 所有的以 log开头的方法
     expression = "execution(void  com.xdl.service.EmpService.log*())"
          程序中  所有的 以 add开头的方法 
     expression = "execution(* add*())"
         程序中  com.xdl 包 及子包 所有的 以 add开头的方法 
     expression = "execution(* com.xdl..*.add*())"
 bean  限定表达式   
         以spring 容器中bean 的 id 作为限定标准 
     experession = "bean(emp*)"
     
 5.Spring AOP 通知的五种类型
   <aop:before>  前置通知   业务方法调用之前执行 
   <aop:after-returning> 后置通知  业务方法不抛异常 业务执行之后执行 
           如果业务方法抛异常 则不执行 
   <aop:after>  最终通知   业务方法 无论是否抛异常  最终都会执行 
   <aop:after-throwing>  异常通知  业务方法抛出异常之后 执行
   <aop:around>  环绕通知   业务方法之前和之后 都执行 
       
 6.基于标注的 aop 
   6.1 拷贝 ioc  和  aop 的jar 包到项目下 
   
   6.2 拷贝spring 的配置文件   
         先开启组件扫描    再开启基于标注的 aop
    <!-- 开启组件扫描  -->
<context:component-scan base-package="com.xdl" ></context:component-scan>
<!-- 开启基于标注的aop -->
<aop:aspectj-autoproxy ></aop:aspectj-autoproxy>         
   6.3 写一个Service 的类   BankService
       里面有   一个业务方法  transfter     login 
   6.4 写一个切面类出来   
         里面写一些共通的处理代码 
    @Component
    @Aspect        
    在切面方法上 加  @Before("切点表达式")  @After 等标注 
   6.5 测试 
     
   最后总结一句话 就是  切面 ---- 通知 ----- 切点 
     
     
       
  
  
                    
      
原创粉丝点击