Spring框架的Bean细节

来源:互联网 发布:淘宝照片处理教程 编辑:程序博客网 时间:2024/06/05 15:55

首先来了解一个专业名词,IoC

inversion on control ,控制反转
这是spring的一个核心功能,意为把创建对象交给别人来做。
而这个一个功能叫交给Bean来完成,bean是放在applicationContext.xml中配置

现在来看一下bean节点需要注意什么属性

  • id:获取该bean的标志
  • class:该bean的实体类路径
  • scope:singleton(单例),prototype(多例)
  • lazy-init:是否延迟创建
  • init-method:创建对象时执行
  • destroy-method:销毁对象时执行

废话不多说,看代码。

实体类User,就输出了一句话
public class User {    public User() {        System.out.println("创建了user对象");    }    public void init(){        System.out.println("初始化");    }    public void destroy(){        System.out.println("销毁");    }}

1:对象创建

(1)scope=”singleton”
@Test    public void testBean() throws Exception {        //配置文件applicationContext.xml        ApplicationContext ac = new ClassPathXmlApplicationContext(                "com/qingtian/spring/applicationContext.xml");        User user = (User) ac.getBean("user");        User user1 = (User) ac.getBean("user");        System.out.println(user);        System.out.println(user1);    }
先来看一下输出日志

1

虽然我获取了user和user1两个对象,由于scope设置的是单例:singleton,所以输出的是同一个对象
(2)scope=”prototype”
代码与1的一致,只将scope属性设置为prototype
来看一下输出的日志

2

User对象创建了两个,并且是不同的。

2:什么时候创建

(1)scope=”singleton”
@Test    public void testBean() throws Exception {        ApplicationContext ac = new ClassPathXmlApplicationContext(                "com/qingtian/spring/applicationContext.xml");        System.out.println("创建IOC容器");        User user = (User) ac.getBean("user");        User user1 = (User) ac.getBean("user");        System.out.println(user);        System.out.println(user1);    }
来看一下输出的日志

这里写图片描述

当scope设置为singleton,在容器启动之前,对象就已经创建了,且只有一个!
(2)scope=”prototype”
代码与1的一致,只将scope属性设置为prototype
来看一下输出的日志

3

在用到对象的时候,才会创建对象

3:延迟创建

(1)scope=”singleton” lazy-init=”true”
@Test    public void testBean() throws Exception {        ApplicationContext ac = new ClassPathXmlApplicationContext(                "com/qingtian/spring/applicationContext.xml");        System.out.println("创建IOC容器");        User user = (User) ac.getBean("user");        User user1 = (User) ac.getBean("user");        System.out.println(user);        System.out.println(user1);    }

这里写图片描述

user对象在容器之后才创建的!并且该属性只对singleton有效

4:对象的初始化和销毁

(1)scope=”singleton” init-method=”init” destroy-method=”destroy”
@Test    public void testBean() throws Exception {        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(                "com/qingtian/spring/applicationContext.xml");        System.out.println("创建IOC容器");        User user = (User) ac.getBean("user");        User user1 = (User) ac.getBean("user");        System.out.println(user);        System.out.println(user1);        ac.destroy();    }

这里写图片描述

init_method在对象创建后执行
destroy_method对象销毁后执行

多例的就不展示了

就这样吧,同志们

2 0
原创粉丝点击