列挙単例モード

2302 ワード

Java          。           ,           ,       ,           ,             。

               :
public enum  TestEnum {
    TEST_ENUM;
}
  TEST_ENUM,  TestEnum      。         ,     。       。          CGLib             。    :

エージェントクラス
import java.lang.reflect.Method;

public enum CGLibProxyEnum implements MethodInterceptor {
    CG_LIB_PROXY_ENUM;

    public  T getProxy(Class cls) {
        return (T)Enhancer.create(cls, this);
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        return methodProxy.invokeSuper(o, objects);
    }
}

テストクラス
class Hello {
    public void sayHello() {
        System.out.println("Hello, new Boys");
    }
}
public class Test {
    public static void main(String[] args) {
        Hello helloProxy = CGLibProxyEnum.CG_LIB_PROXY_ENUM.getProxy(Hello.class);
        helloProxy.sayHello();
   }
}
      :Hello, new Boys

   CGLibProxyEnum      MethodInterceptor  ,       intercept  。            CG_LIB_PROXY_ENUM;                。
      ,          ,    ,     。               。       final  ,      。