JDK动态代理(自我总结)

实现步骤:
1.新建生成动态代理对象类,实现java.lang.reflect.InvocationHandler接口。
2.新建一个方法用与生成代理对象并返回对象。
3.实现接口方法invoke,这也是切面处理的核心操作地。
-------上层接口 
public   interface  Service  {
    
void doService(String name);
}

 -----接口实现
public   class  ServiceImpl  implements  Service {

    @Override
    
public void doService(String name ) {
        System.out.println(
"hello " + name);
    }


}



 -------实现InvocationHandler接口的类
public   class  ServiceDynamicProxy  implements  InvocationHandler  {
    
private Object targetObject ;
    
//把要代理的类传进去
    public Object createProxy(Object targetObject){
        
this.targetObject = targetObject ;
        
return  Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
                                targetObject.getClass().getInterfaces(), 
this);
    }

    
//invoke方法会自动调用,切面处理
    @Override
    
public Object invoke(Object proxy, Method method, Object[] args)
            
throws Throwable {
        checkSecurity();
        System.out.println(proxy.getClass().getName());
        Object result 
= null ;
        result 
= method.invoke(this.targetObject,args);
        
return result;
        
    }

    
public void checkSecurity(){
        System.o ut.println(
"check the security ");
    }


}
-------测试类


public   class  DynamicProxyClient  {
    
public static void main(String[] args) {
        ServiceDynamicProxy dynamicProxy 
= new ServiceDynamicProxy();
        Service service 
= (Service)dynamicProxy.createProxy(new ServiceImpl());
        service.doService(
"xuyiyu");
    }

}


你可能感兴趣的:(JDK动态代理(自我总结))