Bean 的常见几种实例化方式
刚学完bean的几种常见的实例化方式,感觉以后要使用的话会被遗忘,索性就总结一下,以后要是用到新的方式,还会再追加。
- 第一种:默认无参数构造器进行初始化
- 第二种:静态工厂进行初始化
- 第三种:实例工厂进行初始化
- 第四种:实现FactoryBean接口进行初始化
第一种:默认无参数构造器进行初始化
-我们先创建一个Bean1类
package com.yyk.definationBean;
/**
*
* @author Administrator
* 对于bean1
* 我们采用第一种实例化bean的方式:默认无参数构造器进行初始化
*/
public class Bean1 {
//默认会有一个无参构造器 所以才不会报错
public void getBean(){
System.out.println("Bean1==========getBean()");
}
/**
测试1 如果我们加一个有参数的构造器 ,测试结果会报错
public Bean1(int n){}
测试2 如果存在一个无参的 一个有参的 构造器 则不会报错
public Bean1(int n){}
public 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.yyk.definationBean.Bean1"/>
-在测试程序中进行调用
@Test
public void testDefination() {
//获取工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
bean1.getBean();
System.out.println(bean1);//获取bean1对象
第二种:静态工厂进行初始化
-我们先创建一个Bean2类
package com.yyk.definationBean;
/**
*
* @author Administrator
* 对于bean2
* 我们通过静态工厂方法进行实例化bean, 我们要建立一个静态工厂类
*/
public class Bean2 {}
-创建一个静态工厂类:
package com.yyk.definationBean;
/* bean2的工厂类
实际中静态工厂的使用是 拿别人做好的静态工厂 我们调用其中的一些方法 就可以使用
然后进行 静态工厂的配置
*/
public class Bean2Factory {
//静态方法
public static Bean2 initBean2(){
System.out.println("静态工厂方法==============");
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.yyk.definationBean.Bean2Factory" factory-method="initBean2"/>
-在测试程序中进行调用
@Test
public void testDefination() {
//获取工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
//通过调用静态工厂的方式进行
Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");
System.out.println(bean2);//获取bean2对象
第三种:实例工厂进行初始化
-我们先创建一个Bean3类
package com.yyk.definationBean;
/**
*
* @author Administrator
* 对于bean3
* 用实例工厂进行实例化bean
*/
public class Bean3 {}
-Bean3的实例化工厂
package com.yyk.definationBean;
//实例工厂方法
//显示中使用别人的工厂的时候进行调用 然后进行配置
public class Bean3Factory {
public Bean3 createBean3(){
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="bean3Factory" class="com.yyk.definationBean.Bean3Factory"/>
<bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"/>
-在测试程序中进行调用
@Test
public void testDefination() {
//获取工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
//通过实例工厂方法进行
Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
System.out.println(bean3);//获取bean3对象
第四种:实现FactoryBean接口进行初始化
-我们先创建一个自定义工厂bean类
package com.yyk.definationBean;
import org.springframework.beans.factory.FactoryBean;
/**第四种 利用FactoryBean 进行实例化Bean
* 自定义工厂Bean 需要实现一个接口
* 实现方法 之后进行配置
*/
public class MyFactoryBean implements FactoryBean<Bean3> {
//返回目标对象的方法
@Override
public Bean3 getObject() throws Exception {
System.out.println("这是一个工厂bean========");
return new Bean3();
}
@Override
public Class<?> getObjectType() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return false;
}
}
-在配置文件中进行配置:
<?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">
<!-- 第四种 利用FactoryBean进行 -->
<bean id="bean3_2" class="com.yyk.definationBean.MyFactoryBean"/>
-在测试程序中进行调用
@Test
public void testDefination() {
//获取工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
//通过实现FactoryBean方法进行
System.out.println(applicationContext.getBean("bean3_2"));
除此之外,还可以使用bean的注解进行实例化bean。