您的位置:首页 > 编程语言 > Java开发

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

2012-07-11 22:33 603 查看
普通定义Bean并且进行初始化的方法一般通过property(属性)的setter方法或者构造方法进行。例如

[html] view
plaincopy

<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方法类:

[java] view
plaincopy

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:

[html] view
plaincopy

<?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>

静态工厂类:

[java] view
plaincopy

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接口:

[java] view
plaincopy

package injection;

public interface MailConfig

{

public void doIt();

}

实现MailConfig接口的MailConfigOfCompanyOne类 :

[java] view
plaincopy

package factorybean;

import injection.MailConfig;

public class MailConfigOfCompanyOne implements MailConfig

{

@Override

public void doIt()

{

System.out.print("companyOne's mailConfig is created.");

}

}

实现MailConfig接口的MailConfigOfCompanyTwo类:

[java] view
plaincopy

package factorybean;

import injection.MailConfig;

public class MailConfigOfCompanyTwo implements MailConfig

{

@Override

public void doIt()

{

System.out.print("companyTwo's mailConfig is created.");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: