时间:2021-05-20
工厂模式
Spring中bean的创建,默认是框架利用反射new出来的bean实例。有时候也会有一些复杂的情况。
假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有DriverName(机长姓名),此时可以使用工厂模式帮我们创建对象,有一个专门帮我们创建对象的类帮我们创建对象,这个类就叫工厂。
public class AirPlane { private String DriverName;// 机长姓名 private String AirPlaneName;// 飞机名字 private String longth;// 飞机长度 private Integer num;// 载客量 //省略getter与setter方法}静态工厂:工厂本身不用创建对象,通过静态方法调用。
实例工厂:工厂本身需要创建对象,需要先new一个工厂实例。
1.使用静态工厂创建bean
静态工厂:
package com.gql.factory;import com.gql.bean.AirPlane;/** * 静态工厂 * * @author guoqianliang */public class AirPlaneStaticFactory { public static AirPlane getAirPlane(String drivername) { System.out.println("静态工厂造飞机..."); AirPlane airplan = new AirPlane(); airplan.setDriverName(drivername); airplan.setAirPlaneName("歼20"); airplan.setLongth(20); airplan.setNum(1); return airplan; }}在xml中注册静态工厂:
<!-- 静态工厂: factory-method="getAirPlane"指定哪个方法是工厂方法--> <bean id="airPlan1" class="com.gql.factory.AirPlaneStaticFactory" factory-method="getAirPlane"> <constructor-arg value="舒克"></constructor-arg> </bean>测试:
@Test public void test07() { System.out.println("容器启动完成"); AirPlane bean = (AirPlane) ioc.getBean("airPlan1"); System.out.println("打印飞机属性:" + bean); }2.使用实例工厂创建bean
实例工厂:
package com.gql.factory;import com.gql.bean.AirPlane;/** * 实例工厂 * @author guoqianliang */public class AirPlaneInstanceFactory { public AirPlane getAirPlane(String drivername) { System.out.println("实例工厂造飞机..."); AirPlane airplan = new AirPlane(); airplan.setDriverName(drivername); airplan.setAirPlaneName("歼20"); airplan.setLongth(20); airplan.setNum(1); return airplan; }}在xml中注册实例工厂:
测试:
@Test public void test08() { System.out.println("容器启动完成"); AirPlane bean = (AirPlane) ioc.getBean("airPlan2"); System.out.println("打印飞机属性:" + bean); }3.实现FactoryBean工厂创建Bean
ioc容器启动的时候不会创建实例(无论是单实例还是多实例),获取的时候才创建实例对象。
实现FactoryBean接口:
package com.gql.factory;import org.springframework.beans.factory.FactoryBean;import com.gql.bean.Book;public class MyFactoryBean implements FactoryBean<Book> { /** * 返回创建的对象 */ @Override public Book getObject() throws Exception { System.out.println("MyFactoryBean创建对象..."); Book book = new Book(); book.setBookName("红楼梦"); book.setAuthor("曹雪芹"); return book; } /** * 返回创建的对象的类型 */ @Override public Class<?> getObjectType() { // TODO Auto-generated method stub return Book.class; } /** * 是单例? true:是 false:不是 */ @Override public boolean isSingleton() { // TODO Auto-generated method stub return true; }}在xml中注册:
<!-- 使用FactoryBean --><bean id="myFactoryBean" class="com.gql.factory.MyFactoryBean"></bean>测试:
@Test public void test09() { System.out.println("容器启动完成"); Object bean = ioc.getBean("myFactoryBean"); System.out.println("打印属性:" + bean); }到此这篇关于Spring框架通过工厂创建Bean的三种方式实现的文章就介绍到这了,更多相关Spring 工厂创建Bean内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
IOC装配Bean(1)Spring框架Bean实例化的方式提供了三种方式实例化Bean构造方法实例化(默认无参数,用的最多)静态工厂实例化实例工厂实例化下面先
今天我想来说说如何通过xml配置来实例化bean,其实也很简单。使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建、静态工厂创建、实例工厂创建
自动装配是Spring满足Bean依赖的一种方式;Spring会在context中自动寻找,并自动给bean装配属性;在Spring中有三种装配的方式:在xml
关于在spring容器初始化bean和销毁前所做的操作定义方式有三种:第一种:通过注解@PostConstruct和@PreDestroy方法实现初始化和销毁b
实现Struts、Spring和Hibernate三种框架的整合。为实现SSH多层框架的整合,Web通常会被分层,即presentationlayer、data