package com.service;
public interface BaseService {
public void eat();
}
package com.serviceImpl;
import com.service.BaseService;
public class 蝉 implements BaseService {
public void eat() {
// TODO Auto-generated method stub
System.out.println("蝉吃树汁");
}
}
package com.util;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class 黄雀 implements InvocationHandler {
private Object proxy1;//监听小蝉的监听对象
public 黄雀(Object proxy1) {
this.proxy1 = proxy1;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//主要业务 螳螂君
method.invoke(proxy1, args);
次要业务();
return null;
}
private void 次要业务() {
System.out.println("黄雀吃螳螂君");
}
}
package com.util;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import com.service.BaseService;
public class 螳螂 implements InvocationHandler {
private BaseService obj;//小蝉
@Override
public Object invoke(Object listen, Method method, Object[] arg2) throws Throwable {
// 小蝉吃树汁
method.invoke(obj, arg2);
次要业务();
return null;
}
public 螳螂(BaseService obj) {
this.obj = obj;
}
private void 次要业务(){
System.out.println("螳螂吃小蝉");
}
}
package com.util;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import com.service.BaseService;
import com.serviceImpl.蝉;
public class BeanFactory {
public static BaseService newInstance(Class classFile) {
//传建一个真实小蝉
BaseService 真实小蝉 = new 蝉();
InvocationHandler 螳螂君 = new 螳螂 (真实小蝉);
Class arry[]= {BaseService.class};
BaseService proxy1=(BaseService) Proxy.newProxyInstance(classFile.getClassLoader(), arry, 螳螂君);
//创代理实现类 黄雀君;
InvocationHandler 黄雀君 =new 黄雀(proxy1);
BaseService proxy2 = (BaseService) Proxy.newProxyInstance(classFile.getClassLoader(), arry, 黄雀君);
return proxy2;
}
}
package com.test;
import com.service.BaseService;
import com.serviceImpl.蝉;
import com.util.BeanFactory;
public class Test {
public static void main(String[] args) {
BaseService 小蝉 = BeanFactory.newInstance(蝉.class);
小蝉.eat();
}
}