Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动将新的spring启动的bean添加到应用程序中_Java_Spring - Fatal编程技术网

Java 自动将新的spring启动的bean添加到应用程序中

Java 自动将新的spring启动的bean添加到应用程序中,java,spring,Java,Spring,我正在开发一个购物车应用程序 我已经创建了一个产品bean,所有的新产品都是通过spring上下文添加的 如下 <bean id="product1" class="entities.Product"> <property name="name" value="product1" /> </bean> <bean id="product2" class="entities.Product"> <property name="n

我正在开发一个购物车应用程序

我已经创建了一个产品bean,所有的新产品都是通过spring上下文添加的 如下

<bean id="product1" class="entities.Product">
    <property name="name" value="product1" />
</bean>
<bean id="product2" class="entities.Product">
    <property name="name" value="product2" />
</bean>
.....
但每次他们添加产品时,我都需要将代码更改为显示产品集

如何实现自动化,以便我可以事先知道XML中的产品数量 或者让每个新产品都自动处理

我目前正在使用这是工作良好,但我相信有更好的解决方案

Set<Product> products = new HashSet<Product>();
    int i=1;

        while(true){
            try{
            products.add((Product) context.getBean("product"+i));
            }
            catch(NoSuchBeanDefinitionException n){
                System.out.println(n);
                break;
            }
            i++;
        }



    for(Product p : products)
        System.out.println(p.getName());
Set products=new HashSet();
int i=1;
while(true){
试一试{
add((Product)context.getBean(“Product”+i));
}
捕获(NoSuchBeanDefinitionException n){
系统输出println(n);
打破
}
i++;
}
对于(产品p:产品)
System.out.println(p.getName());

您可以使用
context.getBeanNamesForType(Product.class)
获取指定类型的bean的名称。
例如:

stringnames[]=context.getBeanNamesForType(Product.class);

对于(int i=0;i您可以使用
context.getBeanNamesForType(Product.class)
获取指定类型的bean的名称。
例如:

stringnames[]=context.getBeanNamesForType(Product.class);
对于(inti=0;i使用返回映射的方法:键是bean的名称,值是bean实例:

    Map map = context.getBeansOfType(Product.class);
    for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
        String beanName = (String) iterator.next();
        System.out.println(beanName + " for bean instance: " + map.get(beanName));
    }
而是使用返回映射的方法:键是bean的名称,值是bean实例:

    Map map = context.getBeansOfType(Product.class);
    for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
        String beanName = (String) iterator.next();
        System.out.println(beanName + " for bean instance: " + map.get(beanName));
    }

您可以使用依赖项注入。在需要
Product
实例的类中,简单地将一个字段放入集合(
List
Set
Map
)或数组(
Product[]
)中,并将
@Autowired
@Inject
放在该字段上

public MyClass {

    @Autowired
    private List<Product> products;

}
公共MyClass{
@自动连线
私人上市产品;
}
这将指示应用程序上下文将
Product
类型的所有bean注入到该集合中。现在,在需要它的方法中,您只需访问该集合即可


如参考指南中所述。

您可以使用依赖项注入。在您需要
产品
实例的类中,简单地放置一个字段,该字段是集合(
列表
集合
映射
)或数组(
产品[]
并将
@Autowired
@Inject
放在该字段上

public MyClass {

    @Autowired
    private List<Product> products;

}
公共MyClass{
@自动连线
私人上市产品;
}
这将指示应用程序上下文将
Product
类型的所有bean注入到该集合中。现在,在需要它的方法中,您只需访问该集合即可


正如参考指南中所解释的。

为什么每个产品都需要bean?只需声明一个产品列表并检索该列表。@Alex可能应用程序根本没有数据库。是的,没有数据库。@Brat:产品列表一直在更改我们不想更改代码为什么每个产品都需要bean?只需声明一个属性即可产品列表并检索该列表。@Alex可能应用程序根本没有数据库。是的,没有数据库。@Brat:产品列表一直在更改,我们不想更改代码