详解Spring配置文件中bean的相关属性
作者:我也有鱼鱼蒸
这篇文章主要为大家详细介绍了Spring配置文件中bean的相关属性的知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
前言
前面在使用spring容器的时候使用了xml文件进行配置,关于bean的属性有以下几种:
属性名 | 作用 |
---|---|
class | 这个属性是强制性的,并且指定用来创建 bean 的 bean 类 |
name/id | 这个属性指定唯一的 bean 标识符 |
scope | 指定由特定的 bean 定义创建的对象的作用域 |
constructor-arg | 用来注入依赖关系 |
properties | 用来注入依赖关系 |
autowiring mode | 用来注入依赖关系 |
lazy-initialization mode | 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例 |
initialization 方法 | 在 bean 的所有必需的属性被容器设置之后,调用回调方法 |
destruction 方法 | 当包含该 bean 的容器被销毁时,使用回调方法 |
id/name属性
id为bean的唯一标识,但在定义bean的时候也可以不需要写id属性,可以通过class属性的值作为key获取到bean对象:
<bean class="com.cc.service.UserService"></bean>
public class Main { public static void main(String[] args) { ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml"); UserService test = (UserService) a.getBean("com.cc.service.UserService"); test.a(); } }
如果有id,就不能通过这种方式获取,会报NoSuchBeanDefinitionException的错误:
当<baen>标签内没有id属性时,也可以根据name属性获取对象:
<bean name="text" class="com.cc.service.UserService"></bean>
public class Main { public static void main(String[] args) { ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml"); UserService test = (UserService) a.getBean("text"); test.a(); } }
如果有多个相同的name值,那么会报BeanDefinitionParsingException的错,同样,如果有重复的id也会报相同的错误:
<bean name="text" class="com.cc.service.UserService"></bean> <bean name="text" class="com.cc.entity.User"></bean>
scope属性
可以通过scope来制定bean的作用域,取值如下:
作用域 | 描述 |
---|---|
singleton | 在spring IoC容器仅存在一个Bean实例,Bean以单例的形式存在、默认值 |
prototype | 每次从容器中调用Bean时,都会返回一个新的实例,每次调用getBean时,相当于执行new |
request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationcontext环境 |
session | 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationcontext环境 |
global-session | 一般用于Portlet应用环境,该作用域仅适用于WebApplicationcontext环境 |
先将作用域设置为singleton:
<bean id="text" class="com.cc.service.UserService" scope="singleton"></bean>
public class Main { public static void main(String[] args) { ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml"); Object a1 = a.getBean("text"); Object a2 = a.getBean("text"); System.out.println(a1); System.out.println(a2); } }
可以看到a1和a2的地址相同,说明它们为同一个对象。
接下来将作用范围改成prototype
初始化方法和销毁方法
同样,Bean也有关于生命周期的方法,分别是init-method与destroy-method:
<bean id="text" class="com.cc.service.UserService" scope="singleton" init-method="init" destroy-method="destroy"></bean>
public class UserService { public void a(){ System.out.println("........"); } public UserService() { System.out.println("类对象的创建"); } private void init() { System.out.println("初始化方法..."); } private void destroy() { System.out.println("销毁方法..."); } }
public class Main { public static void main(String[] args) { ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml"); UserService text = (UserService) a.getBean("text"); a.close(); } }
注:销毁方法只有在scope为singleton有效,多例模式下通常不会调用销毁方法!
在对象创建完毕之后想做一些操作的方式除了写init-method方法外,还可以实现InitializingBean接口,重写afterPropertiesSet()方法。这里就不再赘述。
到此这篇关于详解Spring配置文件中bean的相关属性的文章就介绍到这了,更多相关Spring bean属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!