spring2

特殊的Bean装配:
   1、后处理Bean
    接口:org.springframework.beans.factory.config.BeanPostProcessor
    示例:所有Bean的字符串属性改成大写
    练习:
    
    Spring已经实现该接口的BeanPostProcessor(不用再注册)
     ApplicationContextAwareProcessor:
      把应用上下文传递给所用实现了 ApplicationContextAware接口的Bean
      ApplicationContextAware接口使用举例,可参照事件监听机制
     DefaultAdvisorAutoProxyCreator
     自动对Bean应用切面
    
   2、Bean工厂后处理(只能在应用上下文中使用)
    接口:org.springframework.beans.factory.config.BeanFactoryPostProcessor
    示例:统计载入到工厂的Bean的个数
    
    Spring内部接口实现:
      org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
       分散配置(PPT42)
      示例:
      练习:
       写一个数据库的配置
      
      属性编辑 
      org.springframework.beans.factory.config.CustomEditorConfigurer
      示例:
      练习:
       CustomerInfo("fname-lname-address")
   
   3、事件监听
    1)自定义事件,通过继承org.springframework.context.ApplicationEvent
    2)自定义监听器,实现 org.springframework.context.ApplicationListener,并注册
    3)发布事件,为得到应用上下文,
     必须实现org.springframework.context.ApplicationContextAware接口
    示例:
    练习:
AOP:
 几个概念:
  (1)目标对象(target)
  就是被代理的对象,也就是具体的业务逻辑。比如OrderService
  (2)切面  (Aspect)
  交叉业务,也就是通用的业务逻辑,比如日志、事务。
  (3)连接点 (Jointpoint)
  切面可以插入的地点,主要有方法、属性
  (4)切入点 (Pointcut)
  指定哪些连接点可以应用切面/通知
  (5)通知(Advice)
  切面的具体实现
  
  也可这样理解:
  advice是你想向别的程序内部不同的地方注入的代码。
  pointcut定义了需要注入advice的位置,通常是某个特定的类的一个 public方法。
  advisor是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码
  
 Advice:
  切面的实现
  类型:
  (1)org.springframework.aop.MethodBeforeAdvice
   在方法调用之前,做处理。
   不能够改变返回值
   不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)
  (2)org.springframework.aop.AfterReturningAdvice
   在方法调用之后,做处理。
   不能够改变返回值
   不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)
  (3)org.aopalliance.intercept.MethodInterceptor
   在方法调用之前以及之后,做处理。
   可以改变返回值,也可以改变流程。
  (4)org.springframework.aop.ThrowsAdvice
   在方法抛出异常后,做处理。
   当该通知处理完异常后,会简单地将异常再次抛出给目标调用方法。
  内置的创建代理类:
  org.springframework.aop.framework.ProxyFactoryBean ppt55
  proxyInterfaces,interceptorNames
  
  配置过程:
   (1)配置目标对象
   (2)配置通知
   (3)利用ProxyFactoryBean将通知织入到目标对象,形成一个动态代理对象
   (4)客户端使用动态代理来访问目标对象的方法。
  
  在默认情况下,通知会应用到所有的方法之上。
  
 Pointcut: ppt48
  根据方法和类决定在什么地方织入通知
 
 Advisor
  将Pointcut与Advice结合到一起。
 
 自定义切入点:
  步骤:
  1)实现org.springframework.aop.ClassFilter
  2)实现org.springframework.aop.MethodMatcher
  3)实现org.springframework.aop.Pointcut
  4)实现org.springframework.aop.PointcutAdvisor
  注意:
   在此可定义
   private Advice advice;
   private Pointcut pointcut;
   在配置文件中,将自定义的切入点与通知绑订到一起
  5)利用ProxyFactoryBean将advisor织入到目标对象
 
 预定义切入点:
  静态切入点: 
   org.springframework.aop.support.NameMatchMethodPointcutAdvisor
   根据方法名称的特点进行匹配
   mappedName,advice(ref)
  org.springframework.aop.support.RegexpMethodPointcutAdvisor
   pattern,advice(ref)
   .       匹配任意单个字符
   +:匹配前一个字符一次或多次
   ×     匹配前一个字符0次或多次
  动态切入点:
   org.springframework.aop.support.ControlFlowPointcut
  切入点的交叉与合并:
   Pointcuts.union
 
  
 
 Introduction
  一种特殊类型的Advice
  为类动态增加方法和属性
  编程步骤:
   
   1)实现org.springframework.aop.IntroductionInterceptor或
   继承org.springframework.aop.support.DelegatingIntroductionInterceptor
   2)使用org.springframework.aop.support.DefaultIntroductionAdvisor
  
  
 自动代理:
 
  Spring在生成代理对象的时候,默认情况下,会使用被代理对象的接口来生成
  代理对象。
  如果被代理对象没有实现接口,此时,Spring会使用CGLIB生成代理对象,此时
  该代理对象是被代理对象的子类。
  
  org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
  根据类的名称来为符合相应名称的类生成相应代理对象。
  beanNames(list),interceptorNames
 
  org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator
  自动将Advisor与匹配的Bean进行绑定
  只能与Advisor配合使用
 练习:
  检测方法执行时间
 
 
 

你可能感兴趣的:(spring,AOP,编程,bean,数据库,list)