1、Bean工厂
package com.ren.day03.bean;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import com.ren.day03.Advice;
public class BeanFactory {
Properties props = new Properties();
public BeanFactory(InputStream ips) {
super();
try {
props.load(ips);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取代理
public Object getBean(String name) {
Object bean = null;
String className = props.getProperty(name);
Class clazz;
try {
clazz = Class.forName(className);
bean = clazz.newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(bean instanceof ProxyFactoryBean){
Object proxy = null;
ProxyFactoryBean proxyBean = (ProxyFactoryBean)bean;
try {
Advice advice = (Advice)Class.forName(props.getProperty(name + ".advice")).newInstance();
Object target = Class.forName(props.getProperty(name + ".target")).newInstance();
proxyBean.setAdvice(advice);
proxyBean.setTarget(target);
proxy = proxyBean.getProxy();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return proxy;
}
return bean;
}
}
2、代理bean工厂
package com.ren.day03.bean;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Collection;
import com.ren.day03.Advice;
public class ProxyFactoryBean {
private Object target = null;
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
public Advice getAdvice() {
return advice;
}
public void setAdvice(Advice advice) {
this.advice = advice;
}
private Advice advice = null;
public Object getProxy() {
// TODO Auto-generated method stub
Object proxy3 = Proxy.newProxyInstance(
Collection.class.getClassLoader(),
new Class[]{Collection.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
advice.beforeMehtod(method); //通过对象传入方法
Object obj = method.invoke(target, args);
advice.afterMehtod(method);
return obj;
}
});
return proxy3;
}
}
3、配置文件
#xxx=java.util.ArrayList
xxx=com.ren.day03.bean.ProxyFactoryBean
xxx.advice=com.ren.day03.MyAdvice
xxx.target=java.util.ArrayList
4、测试框架类
package com.ren.day03.bean;
import java.io.InputStream;
public class TestFrameWork {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
InputStream ips = TestFrameWork.class.getResourceAsStream("config.properties");
Object bean = new BeanFactory(ips).getBean("xxx");
System.out.println(bean.getClass().getName());
}
}