Bean的3种实例化方式

Bean有三种实例化

构造器实例化、静态工厂方式实例化和实例工厂方式实例化。

目录

Bean有三种实例化

一、构造器实例化

概念:构造器实例化是指Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean。

案例演示:

二、静态工厂方式实例化

概念:在该方法中,需要我们自己创建一个静态工厂来创建Bean的实例

演示案例:

三、实例工厂方式实例化

概念:采用直接创建Bean实例的方式。具体看演示讲解

演示案例:


一、构造器实例化

概念:构造器实例化是指Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean。

案例演示:

(1)在chapter02项目的java资源目录下创建一个包,名为:com.itheima.instance.constructor,在包下创建类Bean1

package com.itheima.instance.constructor;

public class Bean1 {

}

(2)配置Bean1类,在包下创建beans1.jsp文件

<?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-4.3.xsd">
    <bean id="bean1" class="com.itheima.instance.constructor.Bean1"></bean>
</beans>

(3)在包下创建一个测试类InstanceTest1

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);

	}

}

运行结果:

二、静态工厂方式实例化

概念:在该方法中,需要我们自己创建一个静态工厂来创建Bean的实例

演示案例:

(1)在src下创建一个新的包,取名为com.itheima.instance.static_factory;在该类下创建一个类Bean2

package com.itheima.instance.static_factory;

public class Bean2 {

}

(2)在包下创建静态工厂MyBean2Factory

package com.itheima.instance.static_factory;

public class MyBean2Factory {
	
	public static Bean2 createBean() {
		return new Bean2();
	}
}

(3)在包下创建beans2.xml文件配置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-4.3.xsd">
    <bean id="bean2" 
    	class="com.itheima.instance.static_factory.MyBean2Factory"
    	factory-method="createBean">
    </bean>
</beans>

将类com.itheima.instance.static_factory.MyBean2Factory的静态工厂方法createBean的id配置为bean2,当向Spring容期的方法getBean()传入参数bean2时,调用com.itheima.instance.static_factory.MyBean2Factory类的静态方法createBean实例化Bean2返回。

(4)创建测试类InstanceTest2

package com.itheima.instance.static_factory;

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

public class InsatanceTest2 {

	public static void main(String[] args) {
		String xmlPath = "com/itheima/instance/static_factory/beans2.xml";
		ApplicationContext applicationContext = new 
				ClassPathXmlApplicationContext(xmlPath);
		System.out.println(applicationContext.getBean("bean2"));

	}

}

(5)运行结果:

三、实例工厂方式实例化

概念:采用直接创建Bean实例的方式。具体看演示讲解

演示案例:

(1)在src下创建一个的名为com.itheima.instance.factory的包,在该包下创建类Bean3

package com.itheima.instance.factory;

public class Bean3 {

}

(2) 在包下创建类MyBean3Factory

package com.itheima.instance.factory;

public class MyBean3Factory {
	
	public MyBean3Factory() {
		System.out.println("bean3工程实例化中");
	}

//	创建bean3实例的方法
	public Bean3 createBean() {
		return new Bean3();
	}
}

 (4)创建beans3.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-4.3.xsd">
    <bean id="myBean3Factory" class="com.itheima.instance.factory.MyBean3Factory"></bean>
    <bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"></bean>
</beans>

 在实例方式实例化这种方式中,配置文件里面需要配置实例化工厂的id,配置实例化Bean3的Bean的id和其调用的方法的id,也就是factory-bean属性和factory-method属性。

(5)在包下创建测试类InstanceTest03

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 applicationContext = new 
				ClassPathXmlApplicationContext(xmlPath);
		System.out.println(applicationContext.getBean("bean3"));

	}

}

(6)运行结果

 三种方式演示完毕,有疑问或者有发现我写错的地方欢迎提出,互相学习

发布了38 篇原创文章 · 获赞 9 · 访问量 1470

猜你喜欢

转载自blog.csdn.net/qq_42023080/article/details/105061290