Spring Bean实例化实现过程解析

 更新时间:2020年02月07日 09:19:46   作者:WODioe  
这篇文章主要介绍了Spring Bean实例化实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了Spring Bean实例化实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Bean的实例化

1.构造器实例化:Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean

package com.itheima.instance.constructor;
 
public class Bean1 {
 
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bean1" class="com.itheima.instance.constructor.Bean1"></bean>
</beans>

在beans1.xml文件中,定义了一个id为bean1的Bean,并通过class属性指定其对应的实现类Bean1

package com.itheima.instance.constructor;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class InstanceTest1 {
  public static void main(String[] args) {
    //定义配置文件路径
    String xmlPath = "com/itheima/instance/constructor/beans1.xml";
    //ApplicationContext在加载配置文件时,对Bean进行实例化
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
    Bean1 bean = (Bean1) applicationContext.getBean("bean1");
    System.out.println(bean);
  }
}

在InstanceTest1类中,首先定义了配置文件的路径,然后Spring容器ApplicationContext会加载配置文件。在加载时,Spring容器会通过id为bean1的实现类Bean1中默认的无参构造方法对Bean进行实例化。

2. 静态工厂方法实例化

package com.itheima.instance.static_factory;
 
public class Bean2 {
 
}
package com.itheima.instance.static_factory;
 
public class MyBean2Factory {
  //使用自己的方法创建Bean2实例
  public static Bean2 createBean(){
    return new Bean2();
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bean2" class="com.itheima.instance.static_factory.MyBean2Factory" factory-method="createBean"></bean>
</beans>

定义id为bean2的Bean,通过class属性指定其对应的工厂实现类(MyBean2Factory.java),需要增加factory-method属性来告诉Spring容器其方法名称为createBean。

package com.itheima.instance.static_factory;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class InstanceTest2 {
  public static void main(String[] args) {
    //定义配置文件路径
    String xmlPath = "com/itheima/instance/static_factory/beans2.xml";
    //ApplicationContext在加载配置文件时,对Bean进行实例化
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
    System.out.println(applicationContext.getBean("bean2"));
  }
}

3.实例工厂方式实例化

package com.itheima.instance.factory;
 
public class Bean3 {
 
}
package com.itheima.instance.factory;
 
public class MyBean3Factory {
  public MyBean3Factory(){
    System.out.println("bean3工厂实例化中");
  }
  //创建Bean3实例的方法
  public Bean3 createBean(){
    return new Bean3();
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myBean3Factory" class="com.itheima.instance.factory.MyBean3Factory"></bean>
<!-- 使用 factory-bean属性指向配置的实例工厂
   使用factory-method属性确定使用工厂中的哪个方法 -->
   <bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"></bean>
</beans>

首先配置了一个工厂Bean,然后配置了需要实例化的Bean。在id为bean3的Bean中,使用factory-bean属性指向配置的实例工厂,使用factory-method属性来确定使用工厂中的createBean()方法

package com.itheima.instance.factory;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class InstanceTest3 {
  public static void main(String[] args) {
    //指定配置文件路径
    String xmlPath = "com/itheima/instance/factory/beans3.xml";
    //ApplicationContext加载配置文件时,对Bean进行实例化
    @SuppressWarnings("resource")
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
    System.out.println(applicationContext.getBean("bean3"));
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于Springboot的高校社团管理系统的设计与实现

    基于Springboot的高校社团管理系统的设计与实现

    本文将基于Springboot+Mybatis开发实现一个高校社团管理系统,系统包含三个角色:管理员、团长、会员。文中采用的技术有Springboot、Mybatis、Jquery、AjAX、JSP等,感兴趣的可以了解一下
    2022-07-07
  • SpringBoot项目yml配置文件不自动提示解决方案

    SpringBoot项目yml配置文件不自动提示解决方案

    这篇文章主要介绍了SpringBoot项目配置文件.yaml/.yml文件编写时没有自动提示的解决方案,文章通过图文结合的方式给大家讲解的非常详细,需要的朋友可以参考下
    2024-06-06
  • SpringBoot 将多个Excel打包下载的实现示例

    SpringBoot 将多个Excel打包下载的实现示例

    本文主要介绍了SpringBoot 将多个Excel打包下载的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • SpringBoot日志信息以及Lombok的常用注解详析

    SpringBoot日志信息以及Lombok的常用注解详析

    日志在我们的日常开发当中是必定会用到的,这篇文章主要给大家介绍了关于SpringBoot日志信息以及Lombok的常用注解的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • java——多线程基础

    java——多线程基础

    Java多线程实现方式有两种,第一种是继承Thread类,第二种是实现Runnable接口,两种有很多差异,下面跟着本文一起学习吧,希望能给你带来帮助
    2021-07-07
  • java实现登录验证码功能

    java实现登录验证码功能

    这篇文章主要为大家详细介绍了java实现登录验证码功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • java关于字符串的常用API

    java关于字符串的常用API

    字符串其实就是一串连续的字符,它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符必须包含在一对双引号之内,今天就来介绍字符串常用的API
    2023-05-05
  • java实现文件导入导出

    java实现文件导入导出

    这篇文章主要介绍了java实现文件导入导出的方法和具体示例代码,非常的简单实用,有需要的小伙伴可以参考下
    2016-04-04
  • java数据结构与算法之插入排序详解

    java数据结构与算法之插入排序详解

    这篇文章主要介绍了java数据结构与算法之插入排序,结合实例形式分析了java插入排序的概念、分类、原理、实现方法与相关注意事项,需要的朋友可以参考下
    2017-05-05
  • Java执行JavaScript代码

    Java执行JavaScript代码

    这篇文章主要为大家详细介绍了Java执行JavaScript代码的具体操作方法,感兴趣的小伙伴们可以参考一下
    2016-03-03

最新评论