动态代理&注解简单分享

来源:互联网 发布:winzip mac 6 注册码 编辑:程序博客网 时间:2024/05/16 14:28


增强一个对象的某个方法有几种方式?
 a.继承
    条件:需要知道其父类
 b.装饰者模式
   不需要知道其父类是谁,只知道其实现的哪个借口即可
   条件:装饰者与被装饰者需要实现同一个接口;装饰者有被装饰者的引用
 c.动态代理
   条件:必须知道被代理的类或者对象是谁
 
1.动态代理
 使用动态代理很简单,明白动态代理能做什么和使用的条件即可。
 注:java已经给我们提供好了使用动态代理的方法,我们只需要运用proxy的方法即可。
 方法:
 Interface BeanProxy=Proxy.NewProxyInstance(
   ClassLoader loader,
   Interface,
   new InvocationHandler() {
   
   @Override
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    //invoke(np.getClass().newInstance(), method, args);
    method.invoke(np.getClass().newInstance(), args);
    System.out.println("增强方法");
    return null;
   }){};
 参数分析:
   a.Classloader代表被代理类所实现接口的加载器
  b.Interface代表被代理类所实现的接口(可以是多个接口)
  c.InvocationHandler代表需要增强的方法(内容)
 细节1:BeanProxy.方法();无论执行的是类的哪一个方法,都会执行一遍invoke方法。
 细节2:判断只对某个方法进行增强,其他方法不增强。(可以使用if)
 细节3:return返回值,谁调用返回给谁,返回的内容就是最终的结果。

2.注解

 常见的注解:@voerride 标记方法重写
       @SuppressWarnings 压制警告
      @Deprecated 标记方法过时
 元注解:@Target 描述注解的适用范围
   @Retention 表示需要在什么级别保存该注解,描述注解的生命周期
 自定义注解:注解的本质--接口
      注解的属性名--接口方法的方法名
      注解的属性值--接口方法的返回值
 注:注解的出现其实是为了替代xml,但是没有完全替代
     自定义的注解,如果只有一个方法,通常起名为value,并且在添加注解属性的时候可以省略value。
 补充:类加载器
  class文件加载到内存中形成class对象,这个过程就是累加载,而做这件事的东西就是加载器。
       类加载器的组成:引导类加载器  扩展类加载器  应用类加载器

 

 

原创粉丝点击