1.Bean标签基本配置
用于配置对象交由Spring来创建;
默认情况下他调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。
基本属性:
- id:Bean实例在Spring容器中的唯一标识
- class:Bean的全限定名称
Bean标签范围配置
scope:对象作用范围
取值范围 | 说明 |
---|---|
singleton | 默认值,单例的(不配scope时)(自动调用无参构造函数) |
prototype | 多例的 |
request | WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中 |
session | WEB项目中, Spring创建一个Bean的对象,将对象存入到session域中 |
global session | WEB项目中,应用在Portlet环境,如果没有Portlet环境那么globalSession相当于session |
Test:(测试scope的属性)
-
在test的Java下新建类com.WU.test.SpringTest
-
在项目的pom.xml中添加junit测试依赖;并刷新maven列表
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
-
在applicationContext.xml中添加scope,改变scope的值观察变化
<bean id="userDao" class="com.WU.dao.impl.UserDaoImpl" scope="singlet/prototype"></bean>
-
新建的测试类代码:
package com.WU.test; import com.WU.dao.UserDao; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { @Test // 测试scope属性 public void test1(){ ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao1 =(UserDao) app.getBean("userDao"); UserDao userDao2 =(UserDao) app.getBean("userDao"); System.out.println(userDao1);//打印1的位置 System.out.println(userDao2);//打印2的位置 } }//观察二者地址是否一样
-
prototype时:(不一样)多个对象
com.WU.dao.impl.UserDaoImpl@67205a84 com.WU.dao.impl.UserDaoImpl@7d0587f1
-
singlet时:(一样)单个对象
com.WU.dao.impl.UserDaoImpl@1c3a4799 com.WU.dao.impl.UserDaoImpl@1c3a4799
关于默认时调用无参构造函数
- 当scope为singlet时;在此处加断点,调试单步执行
public void test1(){
断点 ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); 一
UserDao userDao1 =(UserDao) app.getBean("userDao"); 二
UserDao userDao2 =(UserDao) app.getBean("userDao"); 三
System.out.println(userDao1);
System.out.println(userDao2);
- 发现结果
UserDaoImpl创建....
- 此时并没有获得userDao的Bean;说明在配置文件时,创建spring容器时(即执行一时)此对象UserDaoImpl已被创建
- 当scope为prototype时;仍在此处加断点,调试单步执行
-
发现结果
无打印;说明配置文件时对象未创建;点击步过F8
在二步和三步后都出现了UserDaoImpl创建…
说明在此时getBean时创建对象
UserDaoImpl创建....
UserDaoImpl创建....
综上:
-
当scope取值为singleton时
Bean的实列化个数:1个
Bean的实例化时机:Spring核心文件被加载时,实例化配置Bean实例
Bean的生命周期:
- 对象创建:当应用加载,创建容器时,对象就被创建了
- 对象运行:只要容器在,对象就活着
- 对象销毁:当应用卸载,销毁容器时,对象被销毁
-
当scope取值为prototype时
Bean实例化个数:多个
时机:当调用getBean方法时实例化Bean
生命周期:
-
对象创建:当使用对象时,创建新的对象实例
-
对象运行:只要对象在使用中
-
对象销毁:当对象长时间不用时,被Java的回收站回收
-