spring 中配置关键字总结

一、scope

scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0之后,又引入了另外三种scope类型,即request、session和global session类型。不过这三种类型有所限制,只能在Web应用中使用。也就是说,只有在支持Web应用的ApplicationContext中使用这三个scope才是合理的,

    标记为拥有singleton scope的对象定义,在Spring的IoC容器中只存在一个实例,所有对该对象的引用将共享这个实例。该实例从容器启动,并因为第一次被请求而初始化之后,将一直存活到容器退出,也就是说,它与IoC容器"几乎"拥有相同的"寿命"。

   针对声明为拥有prototype scope的bean定义,容器在接到该类型对象的请求的时候,会每次都重新生成一个新的对象实例给请求方。虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不再拥有当前返回对象的引用,请求方需要自己负责当前返回对象的后继生命周期的管理工作,包括该对象的销毁。也就是说,容器每次返回给请求方一个新的对象实例之后,就任由这个对象实例"自生自灭"了

二、factory-method

Spring可以通过工厂方法生成对象,通过在配置文件中配置,如下

  1. <bean id="foo" class="...Foo">  
  2.     <property name="barInterface">  
  3.         <ref bean="bar"/>  
  4.     </property>  
  5. </bean>  
  6.  
  7. <bean id="bar" class="...StaticBarInterfaceFactory" 
    factory-method="getInstance"/> 

        其中StaticBarInterfaceFactory为工厂类,getInstance为工厂方法,如下

 

  1. public class StaticBarInterfaceFactory  
  2. {  
  3.     public static BarInterface getInstance()  
  4.     {  
  5.         return new BarInterfaceImpl();  
  6.     }  
  7. }

     也可以自己定义生成对象的方法,只要实现Spring提供的FactoryBean接口就可以了 ,FactoryBean是Spring容器提供的一种可以扩展容器对象实例化逻辑的接口,请不要将其与容器名称BeanFactory相混淆。FactoryBean,其主语是Bean,定语为Factory,也就是说,它本身与其他注册到容器的对象一样,只是一个Bean而已,只不过,这种类型的Bean本身就是生产对象的工厂(Factory)。

 

 三、方法注入

     通过方法注入可以达到“每次调用都让容器返回新的对象实例”,如下

Spring容器提出了一种叫做方法注入(Method Injection)的方式,可以帮助我们解决上述问题。我们所要做的很简单,只要让getNewsBean方法声明符合规定的格式,并在配置文件中通知容器,当该方法被调用的时候,每次返回指定类型的对象实例即可。方法声明需要符合的规格定义如下:

 
 
  1. <public|protected> [abstract] <return-type>
    theMethodName(no-arguments); 

也就是说,该方法必须能够被子类实现或者覆写,因为容器会为我们要进行方法注入的对象使用Cglib动态生成一个子类实现,从而替代当前对象。既然我们的getNewsBean()方法已经满足以上方法声明格式,剩下唯一要做的就是配置该类,配置内容如下所示:

 
 
  1. <bean id="newsBean" class="..domain.FXNewsBean" singleton="false">  
  2. </bean>  
  3. <bean id="mockPersister" class="..impl.MockNewsPersister">  
  4.     <lookup-method name="getNewsBean" bean="newsBean"/>  
  5. </bean> 

通过<lookup-method>的name属性指定需要注入的方法名,bean属性指定需要注入的对象,当getNewsBean方法被调用的时候,容器可以每次返回一个新的FXNewsBean类型的实例。

四、BeanFactoryAware接口

Spring框架提供了一个BeanFactoryAware接口,容器在实例化实现了该接口的bean定义的过程中,会自动将容器本身注入该bean。这样,该bean就持有了它所处的BeanFactory的引用。

BeanFactory- Aware的定义如下代码所示:

 
 
  1. public interface BeanFactoryAware {  
  2.     void setBeanFactory(BeanFactory beanFactory)
    throws BeansException;  
  3. }  

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值