黑马程序员技术交流社区
标题:
spring, 动态代理
[打印本页]
作者:
毛羚杨
时间:
2014-2-23 16:30
标题:
spring, 动态代理
public class BeanFactory {
Properties props = new Properties();
public BeanFactory(InputStream ips) {
try {
props.load(ips);
} catch (IOException e) {
e.printStackTrace();
}
}
public Object getBean(String name) throws Exception{
String className=props.getProperty(name);
Class clazz=Class.forName(className);
Object bean=clazz.newInstance();
if(bean instanceof ProxyFactoryBean){
ProxyFactoryBean proxyFactoryBean=(ProxyFactoryBean) bean;
Advice advice=(Advice) Class.forName((String) props.get(name+".advice")).newInstance();
Object taget=Class.forName((String) props.get(name+".advice")).newInstance() ; // 两个相同的代码。
proxyFactoryBean.setAdvice(advice);
proxyFactoryBean.setTaget(taget);
Object proxy=(proxyFactoryBean).getProxy();
return proxy;
}
return bean;
}
}
复制代码
首先我对于动态代理不是很了解,对于spring也是没明白,很简单 张老师在讲课中解释了上面代码的重复问题,,但是始终我没能够明白到底是什么问题造成了代码相同 也就是第二段代码也是".advice"也能够正常运行。
作者:
毛羚杨
时间:
2014-2-23 17:04
有解释不? 自己做沙发感觉很不好啊
作者:
张东健
时间:
2014-2-23 19:55
动态代理的理解:
一个类在实现目标方法(业务逻辑)的时候,还需要添加一些其他的功能,如安全检查,权限验证,日志记录灯,
如调用每一个方法时都需要做这些额外的事,代码重复性高,这些额外功能就是切面代码。这时可将这些额外的
事情交给一个与目标实现类相同接口的代理类管理,当代理类对象调用方法时,它不仅实现目标方法,还
会自动完成这些额外的功能。
作者:
张东健
时间:
2014-2-23 19:57
代理实现原理:
该代理类的构造方法接收一个类型为InvocationHandler的子类对象,这个类其实就是目标类,将这个子类对象通过参数
传给代理类,返回一个代理类对象,代理对象调用和子类中相同的某一方法时,会自动执行invocationHandler接口实现类
中的invoke方法,在这个方法中就会进行额外事物的处理,而目标方法的实际调用还是由子类对象完成的,并把结果返回给
代理对象,也就是说,子类对象只需要关注业务逻辑,其他事由代理对象完成。
作者:
毛羚杨
时间:
2014-2-23 22:01
张东健 发表于 2014-2-23 19:57
代理实现原理:
该代理类的构造方法接收一个类型为InvocationHandler的子类对象,这个类其实就是目标类, ...
有点小小的复杂……还得慢慢理解呀
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2