我正在使用JSF
Spring Hibernate
protected @Inject ChartOfAccount chartOfAccount;
我基本上想从列表中填充chartOfAccount
for (DistributionEntry de : getDistributionEntries()) {
chartOfAccount.setAccount(de.getAccount());
chartOfAccountList.add(chartOfAccount);
}
每次迭代我想chartOfAccount的新对象,否则你知道名单上有与最新值相同的对象.
解决方案一:使用新关键字:-p
for (DistributionEntry de : getDistributionEntries()) {
ChartOfAccount coa= new ChartOfAccount();
coa.setAccount(de.getAccount());
chartOfAccountList.add(coa);
}
解决方案二:applicationContext.getBean
for (DistributionEntry de : getDistributionEntries()) {
chartOfAccount= applicationContext.getBean(ChartOfAccount.class);
chartOfAccount.setAccount(de.getAccount());
chartOfAccountList.add(chartOfAccount);
}
但是我看了某些条款,为了避免使用applicationContext.getBean的
如果我避免使用applicationContext.getBean,什么是处理这种情况的最好方法?这两种行为都一样吗? (ApplicationContext.getBean vs new keyword)
Note: My Managed bean is @Scope(“session”) and Model is @Scope(BeanDefinition.SCOPE_PROTOTYPE), so as we all know that for one session it is singleton and prototype for different session.
最佳答案 如果ChartOfAccount实体位于Application Context并且已注入依赖项,则使用new创建的实例将不会获得任何注入的依赖项.
getBean()技术将为您提供所需的功能,但它被认为是一种不好的做法,因为您在代码中对ChartOfAccount的依赖性进行了硬编码.虽然你的方法和代码中的紧密循环,你真的没有选择.
如果ChartOfAccount是一个持久化的实体,我觉得你会在应用程序上下文中放置一个实例(即使是原型创建)也很奇怪.这里更常见的模式是使用类似Spring支持的数据访问对象.以下是Hibernate的文档:
http://docs.spring.io/spring/docs/2.0.8/reference/orm.html
五年前,这就是你要做的.但是,您可能需要考虑使用JPA和Spring数据:http://projects.spring.io/spring-data-jpa/.它自动生成CRUD存储库,其中包含许多开箱即用的好功能:查询生成,分页等.