????????在面向对象编程中,如果要使用某个类的对象,通常需要手动使用new编码的方式来实例化该对象。使用Spring框架后,我们可以把对象实例化交给Spring容器来处理。
目录
1、构造方法实例化
?2、静态工厂实例化?
3、实例工厂实例化
Spring框架实例化Bean的方式有三种:
- 构造方法实例化
- 静态工厂实例化
- 实例工厂实例化
其中最为常用的是构造方法实例化。
1、构造方法实例化
??????? 构造方法实例化是指Spring容器通过调用Bean类中对应的无参数构造方法来实例化该Bean的一种方式。
??????? 如下通过一个应用案例演示构造方法实例化的过程,步骤如下:
第一步:创建一个动态Web项目,导入Spring框架的核心容器组件和对应依赖的jar包
第二步:在src目录下创建包 cn.sjxy.chapter04.instance,并在该包下创建名为MyBean的类
MyBean.java
package cn.sjxy.chapter04.instance;
/*
*@author qiqi
*@version 创建时间:2021年10月17日下午3:19:28
*类说明
*/
public class MyBean {
private String msg;
public MyBean(){
this.msg="调用[构造方法实例化Bean的方法] 创建MyBean";
//System.out.println("无参数的构造方法被调用");
}
public MyBean(String msg){
this.msg=msg;
//System.out.println("有参数的构造方法被调用");
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "MyBean [msg="+msg+"]";
}
}
第三步:在src目录下创建applicationContext.xml Spring容器核心配置文件
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 采用构造方法实例化Bean -->
<bean id="myBean" class="cn.sjxy.chapter04.instance.MyBean"></bean>
</beans>
第四步:在src目录下创建一个名为TestInstanceBean的测试类,并引入JUnit4.jar,在类中创建testConstructorInstance单元测试方法。 ?
package cn.sjxy.chapter04.test;
import org.springframework.context.ApplicationContext;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.sjxy.chapter04.instance.MyBean;
/*
*@author qiqi
*@version 创建时间:2021年10月17日下午3:28:35
*类说明
*/
public class TestInstanceBean {
@Test
public void testConstructorInstance(){
ApplicationContext contex = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = (MyBean) contex.getBean("myBean");
System.out.println(myBean);
}
}
第五步:运行上述测试类,控制台输出结果如下。
Spring容器已经实例化了MyBean类的对象,且采用的是基于构造方法实例化Bean的方式
?2、静态工厂实例化?
????????静态方法实例化要求开发者在工厂类中创建一个static的静态方法来创建Bean的实例。
????????如下通过一个应用案例演示构造方法实例化的过程,步骤如下:
第一步:在src目录下创建包 cn.sjxy.chapter04.instance,并在该包下创建名为MyBeanStatic的类,并创建一个静态方法来实话MyBean对象。
package cn.sjxy.chapter04.instance;
/*
*@author qiqi
*@version 创建时间:2021年10月17日下午3:57:39
*类说明
*/
public class MyBeanStaticFactory {
public static MyBean createMyBean(){
return new MyBean("调用[静态工厂实例化Bean的方式]创建MyBean");
}
}
?第二步:在Spring框架的核心配置文件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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 采用构造方法实例化Bean -->
<bean id="myBean" class="cn.sjxy.chapter04.instance.MyBean"></bean>
<!-- 采用静态方法实例化Bean
class属性:指定静态工厂类的完整路径
factory-method属性:指定工厂类中的静态方法的名称
-->
<bean id="mystaticFacotry" class="cn.sjxy.chapter04.instance.MyBeanStaticFactory"
factory-method="createMyBean"></bean>
</beans>
第三步:创建testStaticFactory单元测试方法。?
package cn.sjxy.chapter04.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.sjxy.chapter04.instance.MyBean;
/*
*@author qiqi
*@version 创建时间:2021年10月17日下午4:04:10
*类说明
*/
public class testStaticFacotry {
public static void main(String[] args) {
ApplicationContext contex = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = (MyBean) contex.getBean("mystaticFacotry");
System.out.println(myBean);
}
}
第四步:运行上述测试类,控制台输出结果如下。
Spring容器已经实例化了MyBean类的对象,且采用的是基于静态工厂实例化Bean的方式 ?
3、实例工厂实例化
? 使用实例工厂实例化要求开发者在工厂类中定义一个实例方法来创建Bean的实例。
第一步:创建实例工厂MyBeanInstanceFactory,并定义一个实例方法createMyBean
package cn.sjxy.chapter04.instance;
/*
*@author qiqi
*@version 创建时间:2021年10月17日下午4:14:30
*类说明
*/
public class MyBeanInstanceFactory {
public MyBean createMyBean(){
return new MyBean("调用[实例化工厂实例化Bean的方式]创建MyBean");
}
}
第二步:在Spring框架的核心配置文件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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 采用构造方法实例化Bean -->
<bean id="myBean" class="cn.sjxy.chapter04.instance.MyBean"></bean>
<!-- 采用静态方法实例化Bean
class属性:指定静态工厂类的完整路径
factory-method属性:指定工厂类中的静态方法的名称
-->
<bean id="mystaticFacotry" class="cn.sjxy.chapter04.instance.MyBeanStaticFactory"
factory-method="createMyBean"></bean>
<!-- 采用工厂实例化方法实例化Bean -->
<bean id="myBeanInstanceFactory" class="cn.sjxy.chapter04.instance.MyBeanInstanceFactory"></bean>
<bean id="myBeanInstance" factory-bean="myBeanInstanceFactory"
factory-method="createMyBean"></bean>
</beans>
第三步:创建testStaticFactory单元测试方法。?
package cn.sjxy.chapter04.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.sjxy.chapter04.instance.MyBean;
/*
*@author qiqi
*@version 创建时间:2021年10月17日下午4:22:08
*类说明
*/
public class testInstanceFactory {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext contex = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = (MyBean) contex.getBean("myBeanInstance");
System.out.println(myBean);
}
}
?第四步:运行上述测试类,控制台输出结果如下。
?Spring容器已经实例化了MyBean类的对象,且采用的是基于实例工厂实例化Bean的方式 ?
|