一.在Spring中什么是Bean?
简单来说,被Spring创建和管理的Java对象被称为Bean,这些对象基本是POJO.
注意:Bean是对象
二.命名Bean
1.Bean通过名称进行区分。
每一个Bean至少有一个名称,如果开发人员没有为其命名,Spring容器将会为其分配一个内部名称。(类名的首字母小写后的名称)
通过Bean的名称我们可以在其他Bean定义中或者利用显式查找从应用程序代码中引用Bean。在基于XML的配置中,我们可以使用id特性将一个名称分配给一个Bean,从而实现对象注入。
2.如果想在Bean定义中为其分配多个名称,我们可以使用name特性。
在name特性中,可以使用空格,逗号,分号来分离给定Bean定义的多个名称。而在id特性中却不允许使用诸如逗号,分号的特殊字符。
例如:
<bean name="accountDaoInMemory,accountDao"
class="com.wiley.beginningspring.ch2.AccountDao" />
除了第一个名称之外,其他名称都被称为别名aliase。除了上面的方式之外,还可以以下面的方式给Bean起别名:
<bean name="accountDaoInMemory"
class="com.wiley.beginningspring.ch2.AccountDao" />
<alias name="accountDaoInMemory" alias="accountDao" />
三.Bean实例化方法
1.创建一个Bean的常用方法是调用目标类中的一个可用的构造函数。
2.创建Bean的第二个方法是调用目标类可用的静态或实例工厂方法。
四.Bean作用域
我们一般使用bean的scope属性来配置bean的作用域:
1.默认为singleton,意味着这个bean在整个容器的生命周期内只创建这一个Bean实例。
2.第二种为prototype,意味着每当这个bean被需要的时候,都会新建一个实例被注入。
五.延迟初始化(懒加载)
默认情况下,Spring容器会在启动阶段创建Bean。
如果存在大量的Bean定义或者一些特殊的Bean,那么初始化可能会降低启动速度。
Spring支持延迟Bean初始化,如果我们将Bean配置为延迟创建,那么容器将会延迟Bean的创建,直到真正需要时才创建。
在基于XML的配置中,可以在< bean >元素中使用lazy-init特性将Bean定义为延迟,如果想在一个XML文件中将所有Bean定义为延迟,我们可以使用default-lazy-init特性。
例子:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-lazy-init="true">
<!-- 配置bean -->
<bean id="helloworld" class="com.yanjiadou.spring.study.HelloWorld"
lazy-init="false">
<property name="name" value="Spring"></property>
</bean>
</beans>
延迟Bean创建的优点是加快了容器的启动时间,并且占用较少的内存量。但我们也要接受这样做带来的缺点。