论坛首页 Java企业应用论坛

Spring学习笔记:1、概念理解

浏览 26090 次
精华帖 (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的动态代理机制,使得用户需要编写的代码量大大减小,也使得整个框架配置使用趋于一致。
0 请登录后投票
   发表时间:2005-02-20  
用不着ctx.getBean()的。。。
把autowire开起来,你要什么不用向spring去get,它会给你的,具体的去看看jert的代码,那是最好的例子。
照jert的做法可以让你感觉不到spring的存在
0 请登录后投票
   发表时间: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云里雾里的,看了这篇文章才心有所悟。
0 请登录后投票
   发表时间:2005-02-20  
我是在wc里悟的。。。。。
0 请登录后投票
   发表时间: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”。 不知道有没人对此有些意见和评述?


谢谢!
0 请登录后投票
   发表时间:2005-02-20  
原来答案就是这个
http://www.javajia.com/article.php?id=919

以前只匆匆看过,以为是用reflection实现的,没想dynamic proxy so 强, 看来要看看它的src 咯
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics