zoukankan      html  css  js  c++  java
  • bean标签的常用属性

    这篇文章总结spring中bean标签的常用属性。

    bean标签常用属性有:

    id
    name
    class
    factory-method
    factory-bean
    init-method
    destory-method
    scope
    autowire
    下面具体来所有这些属性怎么使用。

    id属性

    id标签是bean的唯一标识,IoC容器中bean的id标签不能重复,否则报错。

    name属性

    name是bean的名称标识,在网上看到有的文章说name可以重复,但是我在Srping 4.0.4.RELEASE测试中,bean标签的name属性也是不能重复,且id和name属性也不能重复,name标签应该等同于id属性。

    id和name属性的比较

    1)id重复,运行会报错

    <bean id="user1" class="lzgsea.bean.User"></bean>
    <bean id="user1" class="lzgsea.bean.User"></bean>
    报错:Configuration problem: Bean name 'user1' is already used in this <beans> element

    2)name重复,运行报错

    <bean name="user1" class="lzgsea.bean.User"></bean>
    <bean name="user1" class="lzgsea.bean.User"></bean>
    报错:Configuration problem: Bean name 'user1' is already used in this <beans> element

    3)id和name的值一样时,运行报错

    <bean name="user1" name="user1" class="lzgsea.bean.User"></bean>
    报错:Line 8 in XML document from class path resource [BeanAttribute.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 59; 已经为元素 "bean" 指定属性 "name"。

    4)id和name的值不一样时,运行正常

    <bean id="user1" name="user2" class="lzgsea.bean.User"></bean>
    通过getBean("user1")和getBean("user2")获取到的bean时相等的,user1和user2指向同一个bean。

    ApplicationContext act = new ClassPathXmlApplicationContext("BeanAttribute.xml");
    User user1 = (User) act.getBean("user1");
    System.out.println(user1);
    User user2 = (User) act.getBean("user2");
    System.out.println(user2);
    运行结果:

    lzgsea.bean.User@215be6bb

    lzgsea.bean.User@215be6bb

    所以:IoC容器中id的名称不能重复,name的名称不能重复,且id和name的名称也不能重复。另外id和name都可以指定多个名字,名字之间可用逗号、分号、或者空格间隔。

    class属性

    class属性是bean常用属性,为bean的全限定类名,指向classpath下类定义所在位置

    factory-method属性

    factory-method工厂方法属性,通过该属性,我们可以调用一个指定的静态工厂方法,创建bean实例。

    public class BeanAttribute {

    public static void main(String[] args) {
    ApplicationContext act = new ClassPathXmlApplicationContext("BeanAttribute.xml");
    User user = (User) act.getBean("userFactory");
    System.out.println(user);
    }

    /**
    * 静态工厂方法生成user对象
    * @return
    */
    public static User createUser() {
    return new User();
    }

    }
    <bean id="userFactory" class="lzgsea.factory.BeanAttribute" factory-method="createUser"></bean>
    上述代码就相当于

    User user = BeanAttribute.createUser();
    factory-bean属性

    顾名思义,factory-bean就是生成bean的工厂对象,factory-bean属性和factory-method属性一起使用,首先要创建生成bean的工厂类和方法。

    public class UserFactory {

    public User createUser() {
    return new User();
    }

    }
    上面这段代码就是生产user对象的工程方法了,我们要创建user对象,在java代码中我们这样写:

    UserFactory userFactory = new UserFactory();
    User user = userFactory.createUser();
    在Spring中我们怎么写?

    首先在XML配置中配置UserFactory类和User类:

    <bean id="userFactory" class="lzgsea.factory.UserFactory"></bean>

    <bean id="user" factory-bean="userFactory" factory-method="createUser"></bean>
    然后getBean获取User对象

    ApplicationContext act = new ClassPathXmlApplicationContext("BeanAttribute.xml");
    User user = (User) act.getBean("user");
    System.out.println(user);
    init-method和destory-method属性

    init-method属性是bean的初始方法,在创建好bean后调用该方法。

    destory-method属性是bean的销毁方法,在销毁bean之前调用该方法,一般在该方法中释放资源

    scope属性

    scope属性表示bean的作用范围,scope有4个值:

    singleton:表示整个IOC容器共享一个Bean,也就是说每次说每次通过getBean获取的bean都是同一个。

    prototype:每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。

    request:每次HTTP请求将会生成各自的bean实例

    session:每次会话请求对应一个bean实例

    singleton和prototype经常使用,request和session基本不使用。

    autowire属性

    autowire表示bean的自动装配,autowire的值有:

    no : 默认值,不进行自动装配

    byName : 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配

    byType : 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生,也可以通过设置dependency-check="objects" 让Spring抛出异常。

    constructor:与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean, 那么抛出异常

    autodetect : 通过bean类的内省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式,否则采用 constructor。

    default:由上级标签的default-autowire属性确定。
    ---------------------
    原文:https://blog.csdn.net/lzgsea/article/details/79795290 

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/PengChengLi/p/11076042.html
Copyright © 2011-2022 走看看