详解Spring配置文件中bean的相关属性

 更新时间:2024年12月17日 09:56:09   作者:我也有鱼鱼蒸  
这篇文章主要为大家详细介绍了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属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单了解Spring Bean常用注解的装配

    简单了解Spring Bean常用注解的装配

    这篇文章主要介绍了简单了解Spring Bean常用注解的装配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot调用公共模块的自定义注解失效的解决

    SpringBoot调用公共模块的自定义注解失效的解决

    这篇文章主要介绍了SpringBoot调用公共模块的自定义注解失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java数据结构之复杂度篇

    Java数据结构之复杂度篇

    算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小
    2022-01-01
  • springmvc接收参数为日期类型详解

    springmvc接收参数为日期类型详解

    这篇文章主要介绍了springmvc接收参数为日期类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Spring MVC数据绑定概述及原理详解

    Spring MVC数据绑定概述及原理详解

    这篇文章主要介绍了Spring MVC数据绑定概述及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Spring MVC通过添加自定义注解格式化数据的方法

    Spring MVC通过添加自定义注解格式化数据的方法

    这篇文章主要给大家介绍了关于Spring MVC通过添加自定义注解格式化数据的方法,文中先对springmvc 自定义注解 以及自定义注解的解析进行了详细的介绍,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • java读写串口数据你了解多少

    java读写串口数据你了解多少

    这篇文章主要为大家详细介绍了java读写串口数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Java复制(拷贝)数组的五种方法汇总

    Java复制(拷贝)数组的五种方法汇总

    java基础在Java中我们经常需要复制一个数组,下面这篇文章主要给大家介绍了关于Java复制(拷贝)数组的五种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Java 中一个类提供一个默认对象的多种方法

    Java 中一个类提供一个默认对象的多种方法

    这篇文章主要介绍了Java 中一个类提供一个默认对象的多种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • JavaWeb Hibernate使用全面介绍

    JavaWeb Hibernate使用全面介绍

    在正式进入Hibernate的高级应用之前,需要了解声明是数据模型与领域模型,这两个概念将会帮助我们更好的理解实体对象的关联关系映射
    2022-10-10

最新评论