目录
IOC操作Bean管理XML方式(FactoryBean)
Spring 有两种类型的bean
第一种:是普通的 bean
第二种:工厂bean FactoryBean
第一步:创建类,让这个类作为工厂bean
第二步:在类中实现接口里面的方法,在实现的方法中定义返回的 bean 类型
第三步:测试
总结:
IOC操作Bean管理XML方式(FactoryBean)
Spring 有两种类型的bean
第一种:是普通的 bean
普通的 bean:在xml配置文件中的class配置的是什么类,那么返回的就必须是哪个类
也就是说:在配置文件中定义 bean 类型就是返回类型
演示效果:
第二种:工厂bean FactoryBean
工厂bean:在xml配置文件中的class配置的是什么类,返回的类可以和class配置的类不一样
也就是说:在配置文件定义 bean 类型可以和返回类型不一样
演示:
第一步:创建类,让这个类作为工厂bean
问:如何让类作为工厂 Bean 呢?
方法:实现接口 FactoryBean
为了方便测试,我们先创建一个 factorybean 包
再在 factorybean 包中新建一个 Mybean 类
Mybean类中的代码如下:
package com.lbj.spring5.factorybean;import com.lbj.spring5.collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;public class Mybean {}
新建一个bean3.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"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!--Mybean对象通过配置文件创建出来--><bean id="myBean" class="com.lbj.spring5.factorybean.Mybean"></bean>
</beans>
第二步:在类中实现接口里面的方法,在实现的方法中定义返回的 bean 类型
package com.lbj.spring5.factorybean;import com.lbj.spring5.collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;/*** 工厂模式这里指的是这个实例工厂已经替我们创建好,直接拿着用就行*/
public class Mybean implements FactoryBean<Course>{@Override
// 定义返回bean的实例
// 这么做的目的是设置Mybean这个部分返回的对象是Course对象而不是Mybeanpublic Course getObject() throws Exception {Course course = new Course();course.setCname("语文课");return course;}@Override
// 返回bean的类型public Class<?> getObjectType() {return null;}@Override
// 是否单例public boolean isSingleton() {return false;}
}
第三步:测试
package com.lbj.spring5.testdemo;import com.lbj.spring5.collectiontype.Course;
import com.lbj.spring5.factorybean.Mybean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring5Demo1 {@Testpublic void tsetCollection3(){ApplicationContext context=new ClassPathXmlApplicationContext("bean3.xml");Course course=context.getBean("myBean", Course.class);System.out.println(course);}
}
总结:
工厂bean,就是为了后面返回不同类型对象作个铺垫
工厂模式的意义就是为了不暴露对象创建的过程
泛型工厂模式