时间:2021-05-20
Spring容器是一个大工厂,负责创建、管理所有的Bean。
Spring容器支持2种格式的配置文件:xml文件、properties文件,最常用的是xml文件。
Bean在xml文件中的配置
<beans>
根元素,可包含多个<bean>元素,一个<bean>即一个Bean的配置。
<bean>
一个<bean>即一个Bean对象。原来是new出来该类的一个对象,Spring中是一个<bean>创建一个对象。
<bean name="" class="" scope="" />name指定对象的名称,class指定该Bean的类,scope指定该对象的作用域。class属性是必须的,其它可选。
对象的名称可通过name或id指定,id只能指定一个名称,name可指定一个或多个名称,用逗号或分号隔开即可。示例:name="grade,score"。未指定id或name时,默认取class属性的值。
Bean的作用域
作用域 说明 singleton(单例) 该Bean(类)在Spring容器中只有一个实例,无论引用/获取这个Bean多少次,都指向同一个对象。 singleton是Bean的默认作用域,适用于无会话状态的Bean(如Dao组建、Service组件)。 prototype(原型) 每次获取该Bean时,都会创建一个新的实例。 request 在一次HTTP请求中,获取的是该Bean的同一个实例,该实例只在此次HTTP请求中有效。 对于不同的HTTP请求,会创建不同的实例。 session 在一次HTTP session中获取的是该Bean的同一个实例,该实例只在本次HTTP session中有效。 globalSession 在一个全局的HTTP session中,获取到的是该Bean的同一个实例。 只在使用portlet上下文时有效。 application 为每个ServletContext对象创建一个实例。 只在web相关的ApplicationContext中有效。 websocket 为每个websocket对象创建一个实例。 只在web相关的ApplicationContext中有效。
示例:singleton作用域
缺省scope属性时,默认就是singleton作用域。
示例:prototype作用域
说明:
在xml配置文件中,一个<bean>配置的是一个Bean,配置的是一个类,不是该类的一个实例(对象)。
在调用getBean()时获取/引用容器中Bean实例时,Spring容器根据id/name找到这个Bean对应的配置,查看作用域,该重新新建这个Bean的实例就重新新建,该返回已存在的实例就返回已存在的实例。
<bean>的子元素——<constructor-arg>
<constructor-arg>用于向该bean的构造函数传递参数。一个<constructor-arg>传递一个参数,一个<bean>可带有多个<constructor-arg>子元素,根据<constructor-arg>的个数调用相应的构造函数。
name或index指定形参,name是用形参名指定,index是用形参列表的下标指定(从0开始)。缺省时,默认从第一个参数开始,依次传值。
value或ref指定实参值,value只能指定基础类型(Spring容器会自动转换为对应的数据类型),ref只能指定为其它的Bean(指定为其它Bean的name或id),根据需要选用。也可以用<constructor-arg>的子元素<ref>或<value>来指定。type属性可指定数据类型,这个属性很鸡肋,基本不用。
可以写成这种形式:
<bean name="" class=""> <constructor-arg index/name=""> <value></value> </constructor-arg> <constructor-arg index/name=""> <ref bean="" /> </constructor-arg></bean>依然是一个<constructor-arg>传递一个实参,index/name可缺省。
<value>元素中,如果实参是String、char,不加引号。比如<value>张三</value>,会自动识别类型,2个字符的String。<value>"张三"</value>也是String,但实参是4个字符。
<ref />只能是单标签形式。
参数可以是数组类型
<value>、<ref />根据情况选用。
参数可以是List、Map、Set类型
一个<util:list>传递一个List,一个<value>表示一个列表项,<value>只能传递Java基础类型。如果是其它的Bean,要用<ref />:
<constructor-arg> <util:list> <ref bean="" /> <ref bean="" /> </util:list></constructor-arg><util:list>和<list>的效果一样,使用哪个都行。
Set:用法和List一样。
Map:
<bean name="zhangsan" class="my_package.Student"> <constructor-arg> <util:map> <entry key="name" value="张三" /> <entry key="age" value="20" /> </util:map> </constructor-arg> </bean>一个<entry>表示一个键值对,key、value表示的是基础类型,如果是其它的Bean,用key-ref、value-ref。
说明:
因为<list>元素对应得数据类型是List,<set>对应Set,<map>对应Map,所以形参只能是List/Set/Map类型,不能是ArrayList/HashSet/HashMap等子类的类型,但可以使用泛型。
<list>和<util:list>效果一样,<set>和<util:set>效果一样,<map>、<util:map>效果一样。
如果参数是基础数据类型或是其它的Bean,可以写成<constructor-arg index/name="" value="" />单标签的形式,如果参数是数组、集合这种有多项的数据类型,就需要写成<constructor-arg></constructor-arg>双标签的形式。
<bean>的子元素——<property>
给setter方法传递参数,一个setter方法设置一个属性,一个<property>给一个setter方法传递参数(传递一个参数)。
如果Bean有多个setter方法,可使用多个<property>传递参数。
name指定形参名。value指定值(只能为Java基础类型),或者用ref指定其它Bean。当然也可以用对应的子元素。
同<constructor-arg>一样,<property>可以使用数组、集合,用法相同。
注意:
和<constructor-arg>不同,<property>只能用name,不能用index。
因为<constructor-arg>是向构造函数传递一个参数,构造函数的形参表是有序的,可用index指定,也可用name指定。而Bean的多个setter方法是无序的,只能通过name指定。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
整理总结刚学的关于spring的xml配置bean的知识。在ApplicationContext.xml文件中使用bean节点配置bean,bean的属性id在
Spring配置bean连接数据库两种方法:(1)直接在.xml文件内部配置:
Spring@Configuration注解Spring3.0开始,@Configuration用于定义配置类,定义的配置类可以替换xml文件,一般和@Bean
什么是注解传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:1、如果所有的内容都配置在.xml文件中,那么.
一、什么是Spring?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架二、如何在程序中获取Spring配置的bean呢?方法一:在初