相关疑难解决方法(0)

如何从singleton生成原型对象?(需要设计帮助)

我对Spring比较陌生,我自己也挖了个洞.我正在试图塑造汽车.每个模型都有自己的构建器对象,我有一个BuilderFactory,它根据用户从web-app中选择返回正确的构建器.

因此,我正在寻找有关如何解决这个问题的建议,我需要创建一些单独的车辆,但我不知道在运行时我需要什么类型的车辆,并且每辆车都需要对用户来说是独一无二的

我现在得到的内容如下所示.我现在面临的问题是,因为个别建筑商都是单身人士,所以个别车辆也是如此.我需要它们作为原型.我知道这一切看起来都非常糟糕,所以我相信一定有更好的办法.

网络应用程序的顶级看起来像;

Vehicle vehicle = vehicleBuilderFactory.getBuilder(platform).build();
Run Code Online (Sandbox Code Playgroud)

我的vehicleBuilderFactory看起来像这样;

@Service
public class VehicleBuilderFactory {

@Autowired
Discovery3Builder discovery3Builder;
@Autowired
Discovery4Builder discovery4Builder;

    // Lots of @Autowired statements here. 

@Autowired
FreeLander2010Builder freeLander2010Builder;



public VehicleBuilder getBuilder(Platform platform) {

    switch (platform.getId()) {

    case 1: return discovery3Builder;
    case 2: return discovery4Builder;

            // Lots of case statements here

            case 44: return freeLander2010Builder;
    default: return null;
    }
}

}
Run Code Online (Sandbox Code Playgroud)

这本身看起来很可怕.每个建筑师看起来像;

@Service
public class DefenderBuilder implements VehicleBuilder {

@Autowired
Defender defender;

// Loads of Defender specific setters ommitted  
@Override …
Run Code Online (Sandbox Code Playgroud)

spring scope design-patterns

10
推荐指数
1
解决办法
6262
查看次数

Spring在运行时如何获得关于"强类型集合"的泛型类型信息?

我在下面的Spring 3.0文档中阅读:

强类型集合(仅限Java 5+)

在Java 5及更高版本中,您可以使用强类型集合(使用泛型类型).也就是说,可以声明Collection类型,使其只能包含String元素(例如).如果您使用Spring依赖注入一个强类型的Collection到bean中,您可以利用Spring的类型转换支持,这样强类型Collection实例的元素在被添加到之前就会转换为适当的类型收藏.

public class Foo {

  private Map<String, Float> accounts;

  public void setAccounts(Map<String, Float> accounts) {
      this.accounts = accounts;
  }
}

<beans>
  <bean id="foo" class="x.y.Foo">
      <property name="accounts">
          <map>
              <entry key="one" value="9.99"/>
              <entry key="two" value="2.75"/>
              <entry key="six" value="3.99"/>
          </map>
      </property>
  </bean>
</beans>
Run Code Online (Sandbox Code Playgroud)

当foo bean的accounts属性准备好进行注入时,可以通过反射获得有关强类型Map的元素类型的泛型信息.因此,Spring的类型转换基础结构将各种值元素识别为Float类型,并将字符串值9.99,2.75和3.99转换为实际的Float类型.

这怎么可能?据我所知,通用类型信息在编译期间被删除.

java generics spring type-erasure

0
推荐指数
1
解决办法
1384
查看次数

标签 统计

spring ×2

design-patterns ×1

generics ×1

java ×1

scope ×1

type-erasure ×1