您的位置:首页技术文章
文章详情页

Spring框架通过工厂创建Bean的三种方式实现

浏览:2日期:2023-09-14 13:56:55

工厂模式

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 factory-method='getAirPlane'><constructor-arg value='舒克'></constructor-arg></bean>

测试:

@Testpublic void test07() {System.out.println('容器启动完成');AirPlane bean = (AirPlane) ioc.getBean('airPlan1');System.out.println('打印飞机属性:' + bean);}

Spring框架通过工厂创建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中注册实例工厂:

factory-bean=“InstanceFactory” :指定使用哪个工厂实例。 factory-method=“getAirPlane”:使用哪个工厂方法。

<bean id='InstanceFactory'class='com.gql.factory.AirPlaneInstanceFactory'></bean><bean class='com.gql.bean.AirPlane'factory-bean='InstanceFactory' factory-method='getAirPlane'><constructor-arg value='舒克二号'></constructor-arg></bean>

测试:

@Testpublic void test08() {System.out.println('容器启动完成');AirPlane bean = (AirPlane) ioc.getBean('airPlan2');System.out.println('打印飞机属性:' + bean);}

Spring框架通过工厂创建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> {/** * 返回创建的对象 */@Overridepublic Book getObject() throws Exception {System.out.println('MyFactoryBean创建对象...');Book book = new Book();book.setBookName('红楼梦');book.setAuthor('曹雪芹');return book;}/** * 返回创建的对象的类型 */@Overridepublic Class<?> getObjectType() {// TODO Auto-generated method stubreturn Book.class;}/** * 是单例? true:是 false:不是 */@Overridepublic boolean isSingleton() {// TODO Auto-generated method stubreturn true;}}

在xml中注册:

<!-- 使用FactoryBean --><bean class='com.gql.factory.MyFactoryBean'></bean>

测试:

@Testpublic void test09() {System.out.println('容器启动完成');Object bean = ioc.getBean('myFactoryBean');System.out.println('打印属性:' + bean);}

Spring框架通过工厂创建Bean的三种方式实现

到此这篇关于Spring框架通过工厂创建Bean的三种方式实现的文章就介绍到这了,更多相关Spring 工厂创建Bean内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!

标签: Spring
相关文章: