Bean可以简单的理解为,就是一个在spring配置文件中实例化的对象
1.bean有多个属性及子节点
spring配置文件的根节点beans的下一级节点是bean,用于创建java类的实例化对象(俗称Bean)
<beans>
<bean id="..." class="..." scope="..." autowire="...">
<property name="..." value="..." ref="..." />
<contructor-arg name="..." value="..." />
</bean>
</beans>
id:
唯一标识一个bean,相当于创建实例化对象的名称。
class:
全限定类名,该类用于创建实例化对象。
scope:
bean的作用范围,常见的取值有singleton(单例),prototype(原型)
request,session,globalSession,application,websocket。
默认值是singleton,表示每次调用getBean()方法获取的Bean都是同一个对象。
autowire:
为域属性隐式的自动注入(又称为自动装配),一般可分为两种方式
byName:根据名称自动注入
byType:根据类型自动注入
property:
是bean节点的子节点,用于调用setter方法给Bean的各个属性赋值。
contructor-arg:
是bean节点的子节点,用于传递构造方法的参数,再调用构造方法实现Bean的实例化。
name:
与value联合使用,即k=v(键值形式)
value:
既可以作为property,contructor-arg节点的属性,也可以作为它们的子节点,用于直接指定一个常量值。
ref:
property,contructor-arg这两种节点的属性或子节点,用于引用另一个Bean
set:
用于给Set集合类型的属性赋值。
list:
用于给List集合类型的属性赋值。
map:
用于给Map集合类型的属性赋值。
2.Bean的作用域:即scpoe的值
当通过spring容器创建一个Bean实例时,不仅可以完成Bean的实例化,还可以使用scope属性为Bean指定特定的作用域。
spring支持5种作用域。
singleton:单例模式
在整个spring容器中,默认使用单例模式,使用singleton定义的Bean将是单例的。
即只有一个实例,第二次以后调用的Bean于第一次调用的是同一个对象。
该Bean是在容器被创建时即装配好了。
prototype:原型模式
即每次使用getBean()方法获取同一个Bean实例都是一个新的实例。
对于scope为prototype的原型模式,在代码使用该Bean实例时才对其进行装配。
request:
对于每次HTTP请求,都将产生一个不同的Bean实例。
session:
对于每个不同的HTTP session,都将产生一个不同的Bean实例。
globalSession:
所有HTTP Session共享同一个Bean实例。
注意:
当scope的值为singleton时,每次getBean()方法获取的对象都是同一个
而当scope属性的值为prototype时,每次getBean()方法获取的对象都是一个新的对象。