JDK动态代理借助接口实现,目标类需是接口形式,代理类继承InvocationHandler类,通过反射方式动态创建目标类。
1.目标对象public interface ByShoot { void byShoot(String size); } public class ShootFactory implements ByShoot{ @Override public void byShoot(String size) { System.out.println("已经为您生产出了尺码为"+size+"的鞋子"); } }2.代理类 关键字继承InvocationHandler类
public class LisiFactory implements InvocationHandler { // 被代理的对象 private Object factory ; public Object getFactory() { return factory; } public void setFactory(Object factory) { this.factory = factory; } //ssm: Spring SpringMVC mybitys //Spring:AOP IOC +.... //AOP:代理 (面向切面的编程) // 通过代理对象对方法进行增强 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { FrontService(); Object retObject = method.invoke(factory, args); //这里用了反射的思想,因为我们不知道调用的是那个工厂的那个方法 endService(); return null; } // 前置服务 public void FrontService() { System.out.println("根据您的需求进行市场调研"); } // 后置服务 public void endService() { System.out.println("为您提供一条龙的包办服务"); } //调度员工 public Object getProxyInstance() { // TODO Auto-generated method stub return Proxy.newProxyInstance(factory.getClass().getClassLoader(), factory.getClass().getInterfaces(), this); } }3.测试类,买家
public class Test { public static void main(String[] args) { ClothesFactory clothesFactory = new ClothesFactory(); ShootFactory shootFactory = new ShootFactory(); LisiFactory lisiFactory = new LisiFactory(); lisiFactory.setFactory(shootFactory); ByShoot yuangong1 = (ByShoot) lisiFactory.getProxyInstance(); yuangong1.byShoot("42"); lisiFactory.setFactory(clothesFactory); ByClothes yuangong = (ByClothes) lisiFactory.getProxyInstance(); yuangong.clothes("XXL"); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)