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的实例工厂方法和静态工厂方法  静态工厂方法:直接调用静态方法可以返回Bean的实例 package com.zhu.string.factory; import java.util....
  • zhupengqq
  • zhupengqq
  • 2016年07月01日 21:03
  • 5556

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

如何在Spring中不再使用Spring创建Bean实例,而是把Bean创建过程转移到开发者手中。 1. 使用静态工厂方法创建Bean     使用静态工厂方法创建Bean实例时,class属...
  • u012110719
  • u012110719
  • 2015年08月18日 16:03
  • 1587

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

1. 使用静态工厂方法创建Bean     使用静态工厂方法创建Bean实例时,class属性也必须指定,但此时class属性并不是指定Bean实例的实现类,而是静态工厂类。因为Spring需要知道是...
  • u010889616
  • u010889616
  • 2016年08月21日 17:45
  • 1065

通过Spring Bean 注入static变量,来设计一套适合测试,开发,生产环境的配置项

(http://blog.csdn.net/initphp/article/details/8834844) 这边文章的目的主要是为了在spring开发web项目的时候,让我们的测试,开发...
  • casablancaagnes_3sdf
  • casablancaagnes_3sdf
  • 2016年08月18日 14:50
  • 478

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

使用Spring注解,在静态方法中注入bean
  • xiekuntarena
  • xiekuntarena
  • 2017年04月19日 16:45
  • 3448

Spring Bean工厂创建Bean实例的方法之使用静态工厂类

定义接口: package Bean.staticFactoryBean;public interface Axe ...{   public String chop();}package Bean....
  • daryl715
  • daryl715
  • 2007年03月23日 17:21
  • 3573

spring静态方法中使用bean对象

方法: 在类中创建一个静态的bean对象,然后使用init方式初始化这个bean,这样就可以在静态方法中调用了 @Service("idg") public class IDG...
  • sd4015700
  • sd4015700
  • 2013年11月08日 11:25
  • 4072

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

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

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

Spring 无法注入静态变量,直接在静态方法中获取bean
  • yicong406880638
  • yicong406880638
  • 2016年01月12日 12:19
  • 7977

spring mvc 工具类的静态方法使用注入

类代码@Component public class RegisterConfig { @Autowired private DepartMentService departMentS...
  • wyljz
  • wyljz
  • 2016年11月18日 10:27
  • 4043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring学习笔记 使用Static Factory(静态工厂类)创建Bean
举报原因:
原因补充:

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