这是我现在可以正常使用的东西。它所做的只是一个市场类,该市场类返回一系列项目对象:
我有上课市场
class market {
public ArrayList<Items> createItems(HashMap<String,String> map) {
ArrayList<Items> array = new ArrayList<Items>();
for (Map.Entry<String, String> m : map.entrySet()) {
Item item = new Item();
item.setName(m.key());
item.setValue(m.value());
array.add(item);
}
return array;
}
}
class Item是简单的类,具有用于名称和值的getter和setter
这是我的配置文件的外观:
@Configuration
public class MarketConfig {
@Bean
public Market market() {
return new Market();
}
}
我想如何更改代码:(原因:我不想
Item item = new Item();
然后的方法。我希望Spring将其注入市场)
class market {
public Item item;
//getters and setters for item
public ArrayList<Items> createItems(HashMap<String,String> map) {
ArrayList<Items> array = new ArrayList<Items>();
for (Map.Entry<String, String> m : map.entrySet()) {
item.setName(m.key());
item.setValue(m.value());
array.add(item);
}
return array;
}
}
@Configuration
public class MarketConfig {
@Bean
@Scope("prototype")
public Item item() {
return new Item();
}
@Bean
public Market market() {
Market bean = new Market();
bean.setItem(item());
}
}
我知道每次我调用item()时,原型作用域都会给我新的bean。现在,我想为createItems方法的for循环中的每次迭代使用新bean。我怎么能告诉春天给我。
我知道的一种方法是
applicationContext context = new AnnotationConfigApplicationContext();
context.getBean(Item.class);
但是还有其他方法可以完成我的工作。谢谢
是的,您可以使用查找方法按需创建原型方法
public abstract class ItemFactory {
public abstract Item createItem();
}
现在在applicationContext.xml中只需输入以下内容:
<bean id="item" class="x.y.z.Item" scope="prototype" lazy-init="true"/>
并配置工厂:
<bean id="itemFactory" class="x.y.z.ItemFactory">
<lookup-method name="createItem" bean="item"/>
</bean>
现在,要使用它,需要做的就是在任何bean中自动装配它:
并调用您的查找方法:
@Service
public class MyService{
@Autowired
ItemFactory itemFactory;
public someMethod(){
Item item = itemFactrory.createItem();
}
}
每次调用时,createItem()
您都会收到对新创建的Item类实例的引用。
PS: 我看到您正在使用@Configuration
而不是xml,需要检查是否可以在配置bean中配置查找方法。
希望能帮助到你。
更新: 诀窍很简单:
@Configuration
public class BeanConfig {
@Bean
@Scope(value="prototype")
public Item item(){
return new Item();
}
@Bean
public ItemManager itemManager(){
return new ItemManager() {
@Override
public Item createItem() {
return item();
}
};
}
}
这是我现在能做的很好的东西。它所做的只是一个market类,该类返回一个items对象数组: 我有班级市场 类 Item 是简单类,具有名称和值的获取器和设置器 以下是我的配置文件的外观: 我想如何更改我的代码:(原因:我不想 在then方法中。我希望Spring将其注入市场) 我知道原型作用域每次调用Item()都会给我新的bean;现在我想要createItems方法的for循环中的每次迭代都
在Spring Hibernate XML配置中,我有 我知道SpringJava配置的等价物如下:LocalSessionFactoryBuilder(dataSource())。AddAnnotatedClass(Foo.class)。buildSessionFactory(); 我的问题是,如果我不使用LocalSessionFactoryBuilder类,而是使用HibernateJpaV
默认情况下,对于JSON规范中的“type”:“boolean”,Swagger将在模型中生成一个<code>boolean<code>(object,non-primitive,null)字段。有没有办法让Swagger在模型中生成<code>布尔</code>(原始,不可为空)字段? 基本原理是:Spring MVC将在无效输入上用<code>null</code>初始化这些字段,这是非常不可
我尝试删除方法改造与原始json对象使用删除我的列表项。我曾经使用POST方法与原始方法它成功了,但我需要相同的@DELETE方法。 我需要这种类型的DELETE方法,使用这种url类型的原始对象 API/跟踪/删除/{user_id} 我试着用 我把我的json
微信小程序可以在项目根目录使用 project.config.json 文件对项目进行配置(支付宝小程序存在对应功能的 mini.project.json 文件,但官网并未释出具体文档。因此下面均以微信小程序为例讲解)。如果需要配置该文件,可有以下两种方式: 在项目根目录中配置 当在项目根目录中创建 project.config.json 时,必须指定 miniprogramRoot 字段为编译后
在我的项目中,有两个和一些: 我得到的结果和错误如下: 生成的如下: 我认为和没有正确生成,因为它们是字符串类型,没有引号。 我不知道为什么它会以这种方式产生。请告诉我如何解决这个问题。