锁定老帖子 主题:Spring学习笔记:1、概念理解
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-02-20
引用 这样的问题就是在业务代码里会遍布ApplicationContext 等的影子,假设以后要求不用Spring了,你会怎么办??慢慢改去吧。
所以要把ApplicationContext剔除出去。这无非是取得对象,封装一个工厂方法好了。 “业务代码里会遍布ApplicationContext对象” 最好用一个AutoWire层/拦截器来消除业务代码里频繁使用ApplicationContext。 你说的用一个Factory来隐藏IOC容器的实现是正确的,不过这个Factory的命名不好,最好改为IOCContainer,你还可以在这个IOCCOntainer上提供更易用的一些方法,比如增加AutoWire的支持。使得你的应用中更合理的使用IOC容器的更多特性。 譬如: public interface IOCContainer{ //find by name public Object getBean(String name);; //find by type public Object getBean(Class type);; public Object autoWireComponent(Object src);; } public class SpringContainer implements IOCContainer{ private ApplicationContext context; ....... } 至于上面所说的动态代理,给你一个更简单的说法,比如Spring里的TransactionProxyFactoryBean,他是对支持事务管理的一个代理FactoryBean,利用动态代理,这个类可以不依赖于具体的target 接口,用户可以随意选择target 接口。也不需要用户再手工根据自己的target 接口扩展一个TransactionProxyFactoryBean。 这样的一个用到java.lang.reflect的动态代理机制,使得用户需要编写的代码量大大减小,也使得整个框架配置使用趋于一致。 |
|
返回顶楼 | |
发表时间:2005-02-20
用不着ctx.getBean()的。。。
把autowire开起来,你要什么不用向spring去get,它会给你的,具体的去看看jert的代码,那是最好的例子。 照jert的做法可以让你感觉不到spring的存在 |
|
返回顶楼 | |
发表时间:2005-02-20
[quote="glchengang]怎么缩小Spring框架的影响,就IoC部份谈谈我的想法:
因为IoC主要的作用是对象的组装(通俗来说就是对象生成),我的思路是在Spring的IoC代码之后再封装一层,将它和Spring的代码和业务代码分隔开来。 总觉得这位仁兄对于Ioc的看法有失偏颇,我觉得Ioc的最重要的作用在于减少的对象间的耦合,为系统的扩展提供很好的基础。至于Ioc的实现是通过构造器还是setter(也就是在spring中的xml配置机制),都仅仅是形式而已。不能简单地认为Ioc就是什么,就是什么…… 对于Ioc,我建议你看看Martin Fowler的那篇专讲依赖倒置的文章,这在gigix的blog上有中文版的翻译可以下载,在2004年3月份的程序员上也有出版,反正我是一开始对IOc云里雾里的,看了这篇文章才心有所悟。 |
|
返回顶楼 | |
发表时间:2005-02-20
我是在wc里悟的。。。。。
|
|
返回顶楼 | |
发表时间:2005-02-20
Xiaohanne 写道 我是在wc里悟的。。。。。
你wc真好, [quote="firebody" ] 至于上面所说的动态代理,给你一个更简单的说法,比如Spring里的TransactionProxyFactoryBean,他是对支持事务管理的一个代理FactoryBean,利用动态代理,这个类可以不依赖于具体的target 接口,用户可以随意选择target 接口。也不需要用户再手工根据自己的target 接口扩展一个TransactionProxyFactoryBean。 这样的一个用到java.lang.reflect的动态代理机制,使得用户需要编写的代码量大大减小,也使得整个框架配置使用趋于一致。 <bean id="someObjectProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>ISomeInterface</value> </property> <property name="target"> <ref bean="someObject"/> </property> <property name="interceptorNames"> <list> <value>lockMixinAdvisor</value> </list> </property> </bean> 我奇怪的是,既然有下面这个, <bean id="someObjectProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> 那么程序代码中, 怎么可以这样写? ISomeInterface someObjectProxy = (ISomeInterface); context .getBean("someObjectProxy");; 注意,这里返回的是ISomeInterface ,而且这个someObjectProxy 对象已经具有了ILock+ISomeInterface 的功能,并且在行为表现的完全和ISomeInterface 一致。 如果Spring的代码是预编译的,那可以产生stub之类的,可这里是怎么实现的,挺让人奇怪哦,谁能解释一下么? 此外,还有这一段哦 :) AOP的作用可以简单如下所说:“在一个组件的前后加上一些固定的内容。” 抛开AOP不说,我们自己如果想要写这东西,无非两种方式,一个是proxy实现,然后在proxy的前后添加内容;还有一种就是template实现。 所以在我看来,数据库层的模板其实也算是一种“AOP”。 不知道有没人对此有些意见和评述? 谢谢! |
|
返回顶楼 | |
发表时间:2005-02-20
原来答案就是这个
http://www.javajia.com/article.php?id=919 以前只匆匆看过,以为是用reflection实现的,没想dynamic proxy so 强, 看来要看看它的src 咯 |
|
返回顶楼 | |