1.Bean的作用域种类

Spring中的bean的作用域分为四种:singleton、prototype、session、request,后两种很少使用,下面我们主要来学习前两种

2.singleton单例模式

在Spring种我们可以通过bean标签中的scope属性对Bean的作用域进行设置,singleton是默认值,容器初始时创建bean实例,在整个容器的生命周期内只创建一这一个bean,是单例的,在程序种无论获取多少次这个bean返回的都是同一个bean,并且在容器启动的时候就会创建。

1)验证bean是否是单例的

首先配置一个singleton作用域的bean

 <bean id="car" class="com.wzy.autowire.Car" scope="singleton">
<property name="brand" value="AUDI"/>
<property name="price" value="300000"/>
</bean>

执行java测试类:

 public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml"); Car car = (Car) ctx.getBean("car");
Car car2 = (Car) ctx.getBean("car"); System.out.println(car == car2);
}
}

执行结果:

我们可以看到打印了执行了Car的构造方法,并且两个对象的引用时相等的,说明使用singleton模式多次返回的bean是同一个。

2)验证单例模式的bean是否在IOC容器启动时就被创建

在不改变配置文件的情况下,我们只执行下面一行代码:

 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");

输出结果:

根据输出结果我们可以观察到,我们没有去getBean,但是Car的构造方法还是执行,说明在IOC容器启动时,就将单例的对象创建好,当程序中需要这个bean直接将创建好的bean推送给程序。

3.prototype原型模式(即多例模式)

原型模式是经常使用的一种bean作用域,使用prototype作用域,容器初始化时不创建bean的实例,而在每次请求时都创建一个新的Bean实例,并返回。

1)验证bean是否是多例的

spring配置文件配置一个多例的bean:

 <bean id="car" class="com.wzy.autowire.Car" scope="prototype">
<property name="brand" value="AUDI"/>
<property name="price" value="300000"/>
</bean>

我们同样来执行之前那段Java的测试代码:

public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml"); Car car = (Car) ctx.getBean("car");
Car car2 = (Car) ctx.getBean("car"); System.out.println(car == car2);
}
}

执行结果:

通过输出的结果我们可以观察到,两次获取bean的引用并不相等,说明并不是同一个bean,并且调用了两次构造方法,说明创建了两个Car类的对象。

2)验证prototype模式的bean在容器启动时是否创建

我们在不改变spring配置的情况下,只执行下面一行代码:

 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");

执行结果:

我们可以观察到,控制台上没有任何输出,所以我们可以得出结论,prototype模式下bean是在获取时才创建,而不是在IOC容器启动时创建的。

Spring基础11——Bean的作用域的更多相关文章

  1. (转)配置Spring管理的bean的作用域

    http://blog.csdn.net/yerenyuan_pku/article/details/52833477 Spring管理的bean的作用域有: singleton 在每个Spring ...

  2. Spring 学习笔记 Bean的作用域

    在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.在低版本的Spring中,仅有两个作用域 ...

  3. Spring基础14——Bean的生命周期

    1.IOC容器中的Bean的生命周期方法 SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务.SpringIOC容器对Bean的生命周期进行管理 ...

  4. Spring基础10——Bean之间关系

    1.前言 不同的Bean之间存在两种关系:继承和依赖,这里的继承与java中的继承不同,它指的是配置上的继承. 2.继承bean配置 Spring允许继承bean的配置,被继承的bean成为父bean ...

  5. Spring第五弹—–配置Spring管理的bean的作用域和生命周期

    singleton (默认方式) 在每个Spring IoC容器中一个bean定义只有一个对象实例.默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init=“true” ...

  6. (三)Spring 高级装配 bean的作用域@Scope

    1.默认情况下,spring通过@Autowared注入的bean是单例的bean,但有些情况是不满足的,例如:购物车,每个会话,或每个用户登录使用的购物车都是独立的 spring的定义的作用域: a ...

  7. 配置spring管理的bean的作用域

    .singleton 在每一个spring Ioc容器中一个bean定义只有一个对象实例.默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init = "tru ...

  8. Spring基础篇——bean的自动化装配

    上篇博文讲Spring的IOC容器时说道,虽然容器功能强大,但容器本身只是个空壳,需要我们主动放入装配对象,并告诉它对象之间的协作关系,然后容器才能按照我们的指示发挥它的魔力,完成装配bean的使命. ...

  9. Spring基础09——Bean的自动装配

    1.XML配置的Bean自动装配 SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,而不需要手工去指定要装配的Bean,a ...

随机推荐

  1. Unity PlayerPrefs 存储的位置

    Mac OS 在Mac OS X上PlayerPrefs是存储在~/Library/Preferences文件夹,名为unity.[company name].[product name].plist ...

  2. android实现异步加载图片类

    其中牵涉到的关键知识点 1,回调机制,不过回调接口的实现方式有多种多样,可以是一个类继承该接口,也可以是作为一个方法参数: 可以参照自己的这篇博客: http://www.cnblogs.com/bo ...

  3. ppt制作的相关技巧

    一.好的ppt需要达到的目标是: 用情感打动你,用逻辑说服你 二.好主题,写在封面上 主标题带来冲击力,副标题提供描述性细节 如何打造好标题: (1)用数字给标题添彩 (2)想畅销书学标题 (3)向流 ...

  4. 打开远程桌面时总提示无法打开连接文件default.rdp

    删除C:\Users\Administrator\Documents\default.rdp,再启动远程就好了 http://www.chahushequ.com/read-topic-94-2fa9 ...

  5. mysql高水位问题解决办法

    数据库中有些表使用delete删除了一些行后,发现空间并未释放产生原因:类比Oracle的高水位线产生原理 delete 不会释放文件高水位 truncate会释放 ,实际是把.ibd文件删掉了,再建 ...

  6. SpEL 实例

    SpEl 实例 基于 Spring 解析 @RestController @RequestMapping("/spel") @Slf4j public class SpELCont ...

  7. JWT原理和使用

    jwt JSON Web Tokens,是一种开发的行业标准RFC 7519,用于安全的表示双方之间的声明.目前,jwt广泛的用在系统的用户认证方面,特别是前后端分离项目. 1.jwt认证流程 在项目 ...

  8. 2018 icpc 青岛

    https://zoj.pintia.cn/contests/91827364639/problems C 要把这两个二进制串变为相同,需要先看哪些位置不同,设为数组c,某位为1则两位不同. 分1形成 ...

  9. 判断Ctrl Shift Alt 键当前是否被按下

    Control.ModifierKeys.HasFlag(Keys.Shift) 以此类推

  10. 20191127 Spring Boot官方文档学习(4.12)

    4.12.缓存(Caching) Spring框架提供了对应用程序透明添加缓存的支持.从本质上讲,抽象将缓存应用于方法,从而根据缓存中可用的信息减少执行次数.缓存逻辑是透明应用的,不会对调用者造成任何 ...