解释spring支持的几种bean的作用域,spring五种bean作用域

  解释spring支持的几种bean的作用域,spring五种bean作用域

  00-1010 I . Spring Bean Scope singleton原型总结II。Spring Bean生命周期如何通过接口关闭容器生命周期回调集生命周期通过xml设置生命周期

  00-1010在传统的Spring IoC容器中有两种Bean范围:单例(singleton)和原型(非单例)

  注意:基于Web的容器有其他作用域,所以我在这里不再赘述。

  

目录
singleton是Spring的默认作用域。当Bean的作用域是singleton时,Spring IoC容器中将只有存在一个共享的 Bean 实例。您可以更好地重用对象,并节省重复创建对象的成本。设置方法:将bean元素的scope属性设置为singleton(其实不用设置,因为spring默认是singleton模式)案例1.

  1.创建部门类别

  公共部门{//部门编号私人int deptNo//部门名称私有字符串deptName}2.编写Spring配置文件,并将scope属性设置为singleton。

  bean id= dept class= com . big horn . POJO . dept scope= singleton /bean 3。编写和运行程序

  public static void main(string[]args){//获取IoC容器的应用上下文=new classpathmlaplicationcontext( application context . XML );//从容器中获取对象dept dept 1=context . Get bean( dept ,dept . class);dept dept 2=context . get bean( dept ,dept . class);//打印对象system . out . println(dept 1);system . out . println(dept 2);}4.结果如下,可以发现同一个对象是打印出来的。

  

一、Spring Bean 作用域

原型表示原型(非单例)模式。当Bean的范围是prototype时,每次请求Bean时,Spring容器都会创建一个新的Bean实例。设置方法:将bean元素的scope属性设置为原型案例2.

  1.只需将scope属性更改为原型,其他代码保持不变。

  bean id= dept class= com . big horn . POJO . dept scope= prototype /bean 2。运行结果如下

  

singleton(单例)

spring bean默认为单例,避免了对象的频繁创建和销毁,实现了高性能的bean对象重用。

  表示层、业务层、数据层、工具等类对象只需要调用方法,更适合用Spring IoC容器来管理。

  然而,像那些需要封装实例的域对象不适合由Spring IoC容器管理,因为它们会导致线程安全问题。

  

prototype(原型)

Spring Bean生命周期:Spring Bean对象从创建到销毁的全过程。

  春豆的生命周期大致可以分为以下五个阶段:1。bean的实例化,2。bean属性的赋值,3。bean的初始化,4。豆的使用,5。比恩的

  销毁

  Spring 根据 Bean 的作用域来选择 Bean 的管理方式。

  对于 singleton 作用域的 Bean ,Spring IoC 容器能够一直追踪bean的生命周期;对于 prototype 作用域的 Bean ,Spring IoC 容器只负责创建,然后就将 Bean 的实例交给客户端代码管理,Spring IoC 容器将不再跟踪其生命周期。综上所述: 为了更好研究如何控制bean周期,下面案例中创建的bean默认都使用单例模式。

  

  

如何关闭容器

由于ApplicationContext类中没有关闭容器的方法,所以想要关闭容器需要用到ApplicationContext的子类——ClassPathXmlApplicationContext类。该类又有两种方法可以关闭容器

  1、close关闭容器

  close()方法,在调用的时候关闭容器

  

//获取 ClassPathXmlApplicationContext 容器ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//调用close方法关闭容器context.close();
2、注册钩子关闭容器

  registerShutdownHook()方法,在JVM退出前调用关闭容器

  

//获取 ClassPathXmlApplicationContext 容器ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//调用注册狗子关闭容器context.registerShutdownHook();

  

生命周期回调

Bean 的生命周期回调方法主要有两种:

  初始化回调方法:在 Spring Bean 被初始化后调用,执行一些自定义的回调操作。销毁回调方法:在 Spring Bean 被销毁前调用,执行一些自定义的回调操作。我们可以通过以下 2种方式自定义 Bean 的生命周期回调方法:

  通过接口实现通过 XML 配置实现

  

通过接口设置生命周期

我们可以在 Spring Bean 的 Java 类中,通过实现 InitializingBeanDisposableBean 接口,指定 Bean 的生命周期回调方法。

  案例1

  1.创建User类,并实现InitializingBean, DisposableBean接口,重写afterPropertiesSet()destroy()方法。代码如下

  

/** * 继承接口,程序初始化回调和销毁回调方法 */public class User implements InitializingBean, DisposableBean { String name; int age; //setter方法 public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } //初始化回调方法 @Override public void afterPropertiesSet() throws Exception { System.out.println("这是初始化回调方法"); } //销毁回调方法 @Override public void destroy() throws Exception { System.out.println("这是销毁回调方法"); } //toString方法 @Override public String toString() { return "User{" + "name=" + name +  + ", age=" + age + }; }}
2.编写spring配置文件

  

<bean id="user" class="com.bighorn.pojo.User"> <property name="name" value="bighorn"/> <property name="age" value="18"/></bean>
3.编写运行程序

  

public class App { public static void main(String[] args) { //获取 ClassPathXmlApplicationContext 容器 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //从容器中获取对象 User user = context.getBean("user", User.class); //使用bean System.out.println(user); //调用close方法关闭容器 context.close(); }}
4.运行结果如下

  

  

  

通过xml设置生命周期

注意:由于通过接口设置生命周期的方式会导致代码的耦合性过高,所以通常情况下,我们会通过xml设置生命周期。

  通过 <bean> 元素中的 init-methoddestory-method 属性,指定 Bean 的生命周期回调方法。

  案例2

  1.创建User类,这次不需要继承那两个接口了,但要在添加两个普通方法(方法名可任意):init()destory()代表初始化和销毁方法。代码如下

  

/** * 通过XML配置指定回调方法 */public class User { String name; int age; //setter方法 public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } //初始化回调方法 public void init() throws Exception { System.out.println("这是初始化回调方法"); } //销毁回调方法 public void destroy() throws Exception { System.out.println("这是销毁回调方法"); } //toString方法 @Override public String toString() { return "User{" + "name=" + name +  + ", age=" + age + }; }}
2.编写spring配置文件,在<bean>元素里添加init-methoddestroy-method属性,并指定User类中自定义的init和destory方法(关键)

  

<!--通过XML配置指定回调方法--><bean id="user" class="com.bighorn.pojo.User" init-method="init" destroy-method="destroy"> <property name="name" value="bighorn"/> <property name="age" value="18"/></bean>
3.运行程序和运行结果都与案例1相同,这里就少些笔墨介绍了

  到此这篇关于一文搞懂Spring Bean中的作用域和生命周期的文章就介绍到这了,更多相关Spring Bean作用域 生命周期内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • spring编程式事务处理,spring编程事务
  • spring编程式事务处理,spring编程事务,详解Spring学习之编程式事务管理
  • spring的核心功能模块有几个,列举一些重要的spring模块
  • spring的核心功能模块有几个,列举一些重要的spring模块,七个Spring核心模块详解
  • spring注解和springmvc的注解,SpringMVC常用注解
  • spring注解和springmvc的注解,SpringMVC常用注解,详解springmvc常用5种注解
  • spring实现ioc的四种方法,spring的ioc的三种实现方式
  • spring实现ioc的四种方法,spring的ioc的三种实现方式,简单实现Spring的IOC原理详解
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况,Spring事务失效问题分析及解决方案
  • spring5.0新特性,spring4新特性
  • spring5.0新特性,spring4新特性,spring5新特性全面介绍
  • spring ioc以及aop原理,springmvc aop原理
  • spring ioc以及aop原理,springmvc aop原理,深入浅析Spring 的aop实现原理
  • Spring cloud网关,spring cloud zuul作用
  • 留言与评论(共有 条评论)
       
    验证码: