Spring中的Bean

Bean的基本属性

< beans…/>是Spring配置文件的根元素,可以指定如下属性:

  • defalut-lazy-init
    指定该< beans…/>元素下配置的所有Bean默认的延迟初始化行为。
    ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化,这意味着ApplicationContext在初始化的过程中创建并配置所有的singleton bean。如果你不想让一个singleton bean在ApplicationContext实现在初始化时被提前实例化,那么可以将bean设置为延迟实例化。一个延迟初始化bean将告诉IoC 容器是在启动时还是在第一次被用到时实例化。
    默认default-lazy-init为false,当属性default-lazy-init设置成true时,sping不会再去加载整个对象实例,减少初始化时间,减少spring启动速度。
  • default-merge
    指定该< beans…/>元素下配置的所有Bean默认的merge行为。
  • default-autowire
    指定该< beans…/>元素下配置的所有Bean默认的自动装配行为。
    对于bean当中引用的其他bean,不需要我们自己去配置它该使用哪个类,Spring 的自动装配可以帮助我们完成这些工作。
  • default-autowire-candidates
    指定该< beans…/>元素下配置的所有Bean默认是否作为自动装配的候选Bean
  • default-init-method
    指定该< beans…/>元素下配置的所有Bean默认的初始化方法
  • default-destroy-method
    指定该< beans…/>元素下配置的所有Bean默认的回收方法

< bean…/>元素是< beans…/>元素的子元素。< beans…/>元素下指定的属性都可以在每个< bean…/>元素中指定,只要将属性名中的default去掉即可。当二者所指定的属性不一致时,< bean…/>元素中的属性会覆盖< beans…/>中指定的属性。

定义Bean时通常需要指定两个属性:

  • id
    Bean的唯一标识。容器对Bean的管理、访问以及依赖关系都通过id属性完成。Bean的id属性在Spring中应该是唯一的。id属性需由字母和数字组成,且以字母开头。
  • class
    指定Bean的具体实现类。通常情况下,Spring会直接使用new关键字创建该Bean的实例。

除此之外,Bean还可以指定其它属性:

  • name
    用于为Bean实例指定别名。如果要为Bean实例指定多个别名,可以在name属性中用逗号、冒号或者空格来分割,后面通过任意别名即可访问该Bean实例。作为别名的字符可以随意。
  • alias
    为已有Bean指定别名。如程序无法再定义Bean时指定别名,可以在需要时为一个已经存在的Bean实例指定别名。
//为person实例指定三个别名#abc,@123,abc*
<bean id="person" class="..." name="#abc,@123,abc*" />
//为名为person的实例指定别名jack
<alias name="person" alias="jack" />

Bean的作用域

Spring支持如下五种作用域:

  • singleton
    在整个Spring IOC容器中,singleton作用域的Bean只生成一个实例。容器负责跟踪Bean实例的状态,维护Bean实例的生命周期行为。
  • prototype
    每次通过getBean()方法获取prototype作用域的Bean时,都将产生一个新的Bean实例。Spring容器仅创建Bean实例然后返回给程序,并不跟踪实例也不维护实例状态。
  • request
    对于一次http请求,request作用域的Bean只生成一个实例,在web的request范围内有效。应用于web应用中。
  • session
    对于一次http请求,request作用域的Bean只生成一个实例,在web的session范围内有效。应用于web应用中。
  • global session
    每个全局http session对应一个Bean实例,在使用portlet context时有效。应用于web应用中。

如果不指定作用域,Spring默认使用singleton作用域。在Spring配置文件中通过scope属性配置Bean实例的作用域。

一个例子

//配置一个singleton实例
<bean id="p1" class="..." />
//配置一个proptotype实例
<bean id="p2" class="..." scope="prototype" />

测试代码

public class BeanTest
{
    public static void main(String[] args) throws Exception
    {
        ApplicationContext ctx = new ClassPathXMLApplicationContext("beans.xml");
        System.out.println(ctx.getBean("p1") ==ctx.getBean("p1");
        System.out.println(ctx.getBean("p2") ==ctx.getBean("p2");
    }
}

运行结果如下

true
false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值