Java 自动将新的spring启动的bean添加到应用程序中
我正在开发一个购物车应用程序 我已经创建了一个产品bean,所有的新产品都是通过spring上下文添加的 如下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 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:产品列表一直在更改,我们不想更改代码