码迷,mamicode.com
首页 > 编程语言 > 详细

Spring第一节

时间:2021-05-24 15:31:13      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:调用   throwable   handler   obj   类加载   如何   方法调用   load   object   

(动态代理:JDK动态代理,GGLIB动态代理)

JDK动态代理

例如饭店是一个接口,中餐店、西餐店、自助餐馆都属于饭店。不管哪种饭店,都会提供饭菜,所以都有提供饭菜的方法,只是提供的饭菜不同。在饭店提供饭菜之前,都需要点餐,在提供饭菜之后,都需要付款。那如何实现,在各种餐厅执行提供饭菜方法的前后执行点餐和付款代码呢?如果后期新增了快餐店,如何自动执行点餐和付款呢?

创建饭店接口类

public interface Restaurant {
void show();
}
创建中餐点,西餐店,自助餐类实现饭店类并重写方法
public class ChineseFood implements Restaurant{
@Override
public void show() {
System.out.println("提供中餐。。。");
}
}
public class WesternFood implements Restaurant{
@Override
public void show() {
System.out.println("提供西餐。。。");
}
}
public class Buffet implements Restaurant{
@Override
public void show() {
System.out.println("提供自助餐。。。");
}
}
创建完成之后,写一个动态助理类实现中转,强化功能
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicAgent implements InvocationHandler{

private Object object;//动态代理,创建一个你需要代理的对象 ChineseFood

public Object bind(Object object){//object ChineseFood
this.object=object;//this关键字指向本类中的object为传进来的object
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
//object.getClass().getClassLoader()类加载器,object.getClass().getInterfaces()类接口,this(自己理解(实现类))
}


@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//重写invoke方法
//proxy是对象,对象为类中的属性 method为类中的方法 args为方法中的形参,因为形参可能不止一个,所以用数组
System.out.println("点菜。。。");
Object result = method.invoke(object, args);//method(方法).invoke(引进)
System.out.println("付款。。。");
return result;
}
}
书写完成之后,写出测试类进行确认
public class Test {
public static void main(String[] args) {
Restaurant r=new ChineseFood();//main方法调用的时候,要使用多态的方法
Restaurant r2 = (Restaurant) new DynamicAgent().bind(r);
r2.show();
}
}

Spring第一节

标签:调用   throwable   handler   obj   类加载   如何   方法调用   load   object   

原文地址:https://www.cnblogs.com/LKJfool/p/14782733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!