0

通常,如果我想实现工厂模式,我会这样做。

public class CustomFactory(){

     // pay attention: parameter is not a string
     public MyService getMyService(Object obj){
     /* depending on different combinations of fields in an obj the return
        type will be MyServiceOne, MyServiceTwo, MyServiceThree
     */
     }
}

MyServiceOne、MyServiceTwo、MyServiceThree 是接口 MyService 的实现。

这将工作得很好。但问题是我想让我的对象由 Spring 容器实例化。

我浏览了一些示例,并且知道如何让 Spring 容器根据字符串创建我的对象。

问题是:我可以在这个例子中包含 Spring Container 的对象实现,还是应该在其他地方使用 Object obj 进行所有操作,并在我的 CumtomFactory 中编写一个方法 public MyService getMyService(String string)?

4

1 回答 1

1

那么,您如何看待以下方式?:

public class CustomFactory {
    // Autowire all MyService implementation classes, i.e. MyServiceOne, MyServiceTwo, MyServiceThree
    @Autowired
    @Qualifier("myServiceBeanOne")
    private MyService myServiceOne; // with getter, setter
    @Autowired
    @Qualifier("myServiceBeanTwo")
    private MyService myServiceTwo; // with getter, setter
    @Autowired
    @Qualifier("myServiceBeanThree")
    private MyService myServiceThree; // with getter, setter

     public MyService getMyService(){
         // return appropriate MyService implementation bean
         /*
         if(condition_for_myServiceBeanOne) {
             return myServiceOne;
         }
         else if(condition_for_myServiceBeanTwo) {
             return myServiceTwo;
         } else {
             return myServiceThree;
         }
         */
     }
}

编辑 :

在评论中回答您的问题:

通过String获取不一样吗?

--> 是的,当然,你是从 Spring 中获取这些 bean 的。

我的意思是我的 spring.xml 应该是什么样子?

--> 见下面的 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">

  <!-- services -->

  <bean id="myServiceBeanOne"
        class="com.comp.pkg.MyServiceOne">
    <!-- additional collaborators and configuration for this bean go here -->
  </bean>

  <bean id="myServiceBeanTwo"
        class="com.comp.pkg.MyServiceTwo">
    <!-- additional collaborators and configuration for this bean go here -->
  </bean>

  <bean id="myServiceBeanThree"
        class="com.comp.pkg.MyServiceThree">
    <!-- additional collaborators and configuration for this bean go here -->
  </bean>    
  <!-- more bean definitions for services go here -->

</beans>

我应该在 getMyService 方法中做什么?只是返回 new MyServiceOne() 等等还是什么?

--> 参见上面代码中的 getMyService() 方法,它已更新。

于 2013-06-03T12:31:25.750 回答