Spring学习笔记 使用Static Factory(静态工厂类)创建Bean

原创 2012年07月11日 00:51:36

普通定义Bean并且进行初始化的方法一般通过property(属性)的setter方法或者构造方法进行。例如

<bean id="beanName" class="com.csdn.net.arvin.BeanClass" >
    <constructor-arg value="***" />
    <property name="propertyOne" value="" />
</bean>

这种定义创建Bean相当于使用new  com.csdn.net.arvin.BeanClass(); 的方法来新建Bean对象。在实际应用中很多情况下还会使用设计模式中的工厂模式来创建对象。使用静态工厂类即调用工厂类中的静态方法,比如public static 类名 getInstance()方法返回根据getInstance()方法内部逻辑判断后创建的我们实际需要的对象。

 

以下为完整的通过XML配置文件配置,在Spring中使用工厂类创建我们需要的Bean对象的Demo

 

 这样的好处显而易见,即使实际获取的MailConfig类型对象发生了变化,main方法中的代码也不需要进行变动。

 

代码如下:

MAIN方法类:

package factorybean;

import injection.MailConfig;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class FactoryBeanMain
{
    public static void main(String[] args)
    {
        String springConfig = "factorybean/spring-config.xml";
        ApplicationContext context = 
                new ClassPathXmlApplicationContext(springConfig);
        MailConfig mailConfig = 
                context.getBean("mailConfig", MailConfig.class);
        mailConfig.doIt();
    }
}


Spring-config.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 
	    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="mailConfig" class="factorybean.StaticMailConfigFactory"
	factory-method="getMailConfig">
		<constructor-arg value="companyTwo" />
	</bean>
</beans>


静态工厂类:

package factorybean;

import injection.MailConfig;

public class StaticMailConfigFactory
{
    public static MailConfig getMailConfig(String mailServiceProvider)
    {
        if ("companyOne".equals(mailServiceProvider))
            return new MailConfigOfCompanyOne();
        if ("companyTwo".equals(mailServiceProvider))
            return new MailConfigOfCompanyTwo();
        return null;
    }
}


MailConfig接口:

 

package injection;

public interface MailConfig
{
    public void doIt();
}


实现MailConfig接口的MailConfigOfCompanyOne类 :

package factorybean;

import injection.MailConfig;

public class MailConfigOfCompanyOne implements MailConfig
{

    @Override
    public void doIt()
    {
        System.out.print("companyOne's mailConfig is created.");
    }

}


实现MailConfig接口的MailConfigOfCompanyTwo类:

package factorybean;

import injection.MailConfig;

public class MailConfigOfCompanyTwo implements MailConfig
{

    @Override
    public void doIt()
    {
        System.out.print("companyTwo's mailConfig is created.");
    }

}


 

 

 

 

 

 

 

相关文章推荐

Spring创建对象的三种方法之二静态工厂创建(源码)

不说废话,直接源码,详细关于理论方法的知识,自己去网上面找吧,这个是关于Spring创建对象的三种方法中的:用静态工厂创建。 需要用到三个类, 第一个类: package dao; ...

转:Spring使用静态工厂方法创建Bean

如何在Spring中不再使用Spring创建Bean实例,而是把Bean创建过程转移到开发者手中。 1. 使用静态工厂方法创建Bean     使用静态工厂方法创建Bean实例时,class属...

Spring 无法注入静态变量,直接在静态方法中获取bean

Spring 无法注入静态变量,直接在静态方法中获取bean

使用Spring注解,在静态方法中注入bean

使用Spring注解,在静态方法中注入bean

Spring 在静态工具类中使用注解注入bean

问题最近在项目中遇到这样一个情况:有一个发送邮件的工具类。在这个工具类中提供了几种静态方法,静态方法需要另外一个类的实例提供处理。解决在网上查阅了资料后有几种解决方案,具体可以参考http://blo...

Spring 使用静态工厂方式实例化Bean

知识点介绍:静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取...

Spring的实例工厂方法和静态工厂方法

Spring的实例工厂方法和静态工厂方法  静态工厂方法:直接调用静态方法可以返回Bean的实例 package com.zhu.string.factory; import java.util....

Spring 通过单利模式,单利方法获取对象--factory-method="getInstance"(二)

1 2 package com.ioc; public class A { B b; C c; public A() { } public A(String...

Spring在代码中获取bean的几种方式

如何取得Spring管理的bean  (请用第3种方法): 1、servlet方式加载时, 【web.xml】 Xml代码 servlet>   servlet-name>springM...
  • zsw12013
  • zsw12013
  • 2016年06月17日 17:44
  • 13805

Spring的实例工厂方法和静态工厂方法

Spring的实例工厂方法和静态工厂方法  静态工厂方法:直接调用静态方法可以返回Bean的实例 package com.zhu.string.factory; import java.util....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring学习笔记 使用Static Factory(静态工厂类)创建Bean
举报原因:
原因补充:

(最多只允许输入30个字)