Spring基础:Bean的实例化

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring基础:Bean的实例化相关的知识,希望对你有一定的参考价值。

Spring基础:Bean的实例化

Spring可以看作一个大型工厂,用于生产和管理Spring容器中的Bean,如果要使用找个工厂生产和管理Bean,需要开发者将Bean配置到Spring的配置文件中。

在面向对象编程中,如果要使用某个对象,需要实例化该对象。在Spring框架中,若想使用Spring容器中的Bean,也需要实例化Bean。Spring框架实例化Bean有三种方法:1-构造方法实例化,2-静态工厂实例化,3-动态工厂实例化。其中,最常用的就是构造方法实例化。

构造方法实例化
1-在Eclipse中创建一个名为ch13的Web应用,并导入Spring支持和以来的JAR包。
在这里插入图片描述
2-在src目录下创建instance包,并在该包中创建BeanClass类

public class BeanClass {
	public String message ;
	public BeanClass() {
		message = "构造方法实例化Bean" ;
	}	
	public BeanClass(String message) {
		this.message = message ;
	}
}

3-在创建配置文件applicationContext.xml

<?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 -->
<bean id = "constuctorInstance" class = "instance.BeanClass" />
</beans>

4-在src目录下创建test包,并在该包中创建测试类TestInstance.

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import instance.BeanClass;
/**
 * Spring容器可以调用Bean对应类中的无参数的构造方法来实例化Bean
 * @author nuist__NJUPT
 *
 */
public class TestInstance {
	public static void main(String[] args) {
		//初始化Spring容器,加载配置文件
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml") ;
		//构造方法实例化Bean
		BeanClass b1 = (BeanClass) appCon.getBean("constuctorInstance") ;
		System.out.println(b1 + " " + b1.message) ;
	}
}

5-测试结果如下
在这里插入图片描述
静态工厂实例化
静态工厂实例化需要在工厂类中使用静态方法来创建Bean的实例,在配置Bean时候,class属性指定静态工厂类,还需要使用factory-method属性指定工厂类中的静态方法
1-在instance包中创建工厂类BeanStaticFactory,g该类中使用一个静态方法来实例化对象

public class BeanStaticFactory {
	private static BeanClass beanInstance = new BeanClass("调用静态工厂方法") ;
	public static BeanClass createInstance() {
		return beanInstance ;
	}
}

2-在applicationContext.xml中配置

<?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 -->
<bean id = "constuctorInstance" class = "instance.BeanClass" />
<bean id = "staticFactoryInstance" class = "instance.BeanStaticFactory" factory-method = "createInstance"/>
</beans>

3-在测试类TestInstance中添加测试代码

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import instance.BeanClass;
/**
 * Spring容器可以调用Bean对应类中的无参数的构造方法来实例化Bean
 * @author nuist__NJUPT
 *
 */
public class TestInstance {
	public static void main(String[] args) {
		//初始化Spring容器,加载配置文件
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml") ;
		//构造方法实例化Bean
		BeanClass b1 = (BeanClass) appCon.getBean("constuctorInstance") ;
		System.out.println(b1 + " " + b1.message) ;
		//静态工厂方法实例化Bean
		BeanClass b2 = (BeanClass) appCon.getBean("staticFactoryInstance") ;
		System.out.println(b2 + " " + b2.message) ;
	}
}

4-测试结果如下
在这里插入图片描述
实例工厂实例化
使用实例工厂实例化需要在工厂类中创建一个实例方法来创建Bean的实例,在配置Bean时候,使用factory-bean指定实例工厂,使用factory-method指定实例方法
1-在Instance包中创建工厂类BeanInstanceFatory

public class BeanInstanceFactory {
	public BeanClass createBeanClassInsatnce() {
		return new BeanClass("调用实例工厂方法实例化Bean") ;
	}
}

2-在applicationContext.xml中配置

<?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 -->
<bean id = "constuctorInstance" class = "instance.BeanClass" />
<bean id = "staticFactoryInstance" class = "instance.BeanStaticFactory" factory-method = "createInstance"/>
<bean id = "myFactory" class = "instance.BeanInstanceFactory"/>
<bean id = "instanceFactoryInstance" factory-bean = "myFactory" factory-method = "createBeanClassInsatnce"/>
</beans>

3-在测试类TestInstance中编写测试代码


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import instance.BeanClass;
/**
 * Spring容器可以调用Bean对应类中的无参数的构造方法来实例化Bean
 * @author nuist__NJUPT
 *
 */
public class TestInstance {
	public static void main(String[] args) {
		//初始化Spring容器,加载配置文件
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml") ;
		//构造方法实例化Bean
		BeanClass b1 = (BeanClass) appCon.getBean("constuctorInstance") ;
		System.out.println(b1 + " " + b1.message) ;
		//静态工厂方法实例化Bean
		BeanClass b2 = (BeanClass) appCon.getBean("staticFactoryInstance") ;
		System.out.println(b2 + " " + b2.message) ;
		//实力工厂方法实例化
		BeanClass b3 = (BeanClass) appCon.getBean("instanceFactoryInstance") ;
		System.out.println(b3 + " " + b3.message) ;
	}
}

4-测试结果如下
在这里插入图片描述

以上是关于Spring基础:Bean的实例化的主要内容,如果未能解决你的问题,请参考以下文章

Spring万字详解bean的实例化

Spring基础总结一

看看Spring的源码——bean实例化

学习使用Spring实例化Bean

Spring 实例化bean的三种方式

Spring源码分析非懒加载的Bean实例化过程(下篇)