spring管理Bean两个问题

(1)web Service在启动时都会将一些配置文件中定义的bean都实例化装载进去,这跟我们在使用时,通过new再实例化这个bean的对象然后使用有什么区别,(性能跟快,或还有其他什么优点) 
回答: 

首先 
配置文件中定义的bean并不是都在启动时实例化。 
<bean id="accountService" class="com.foo.DefaultAccountService" scope="singleton"/> 
注意bean有一个属性scope,只有在scope没有配置或配置为如上时,启动时才实例化。(如果一个singleton的bean依赖一个prototype的bean,那么这个prototype的bean在singleton的bean实例化时也会实例化) 
如果定义为scope="prototype"那么只有在这个bean被使用时,才实例化,而且每次都是一个新对象,不是单例。 

其次:在配置文件中声明bean使得spring可以管理这些bean,比如声明式事物功能,就需要你的bean在配置文件中配置。在实例化时spring会为你声明的bean生成一个代理对象,代理对象在调用bean的方法前后加上事务控制逻辑。 

备注:spring管理bean这样在bean初始化过程中,spring可以做很多事情,比如你写一个pojo,spring通过配置就能让他成为rmi,就是在实例化过程,对这个pojo做了更多的处理,不只是简单的new一个对象出来。 

在比如只有spring管理的bean才支持spring的AOP机制。可以使用Aspectj和spring集成,对非spring管理的bean施加AOP 

再次:减少代码中依赖耦合。 

(2) 同样的在配置文件中我们可以ref另外一个bean,这样做又是为什么呢?(我们同样可以使用时new一个这个实例) 
回答: 
把依赖关系定义在配置文件中。 
不要再代码中表现依赖关系,这样在依赖关系有变化的情况下,可以通过配置文件的修改达到目的,而不需要修改代码。 

猜你喜欢

转载自zhegui.iteye.com/blog/1545677