我是spring的新手,我正在尝试修改我的应用以实现spring框架。 我的请求是为每个新请求创建一个新bean,然后在代码中稍后引用该bean,以便从单例bean中为其设置值。 我试图将bean声明为原型,并使用查找方法在我的singleton bean中引用该bean。 但是我的问题是,当稍后尝试获取创建的原型bean来设置值时,我在获取该bean时再次看到了它的创建新bean。
@Component
public class PersonTransaction {
@Autowired
PersonContext btContext;
@Autowired
PersonMapper personMapper;
public void setPersonMapper(PersonViewMapper personMapper) {
this.personMapper = personMapper;
}
public PersonBTContext createContext() throws ContextException {
return btContext = getInitializedPersonBTInstance();
}
private PersonBTContext getContext() throws ContextException{
return this.btContext;
}
public void populateView(UserProfileBean userProfile) throws ContextException {
personMapper.populateView(userProfile,getContext());
}
@Lookup(value="personContext")
public PersonBTContext getInitializedPersonBTInstance(){
return null;
}
}
下面是我的原型课
@Component("personContext")
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class PersonContext extends ReporterAdapterContext {
private List<Person> persons = null;
private Person person = null;
private List<String> attributes = null;
private boolean multiplePersons = false;
private boolean attributeSelected = false;
public boolean isMultiple() {
return multiplePersons;
}
public boolean isAttributeSelected() {
return attributeSelected;
}
private void setAttributeSelected(boolean attributeSelected) {
this.attributeSelected = attributeSelected;
}
// remaining getters/setters
}
当我从单例PersonTransaction类中调用createContext时,它应该创建一个新的原型bean,以及以后如何通过调用getContext()方法来获取创建的原型bean(我在做什么。btContext再次返回了新的bean,我想!!)..
需要帮助,以便稍后获取创建的原型bean来设置值。
感谢您的帮助。
答案 0 :(得分:0)
您要创建请求范围的Bean,而不是原型范围的Bean。看一下Quick Guide to Spring Bean Scopes,它描述了不同的bean范围,包括请求范围:
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public PersonContext personContext() {
return new PersonContext();
}
这将简化您的逻辑,只要您可以在处理请求后丢弃Bean。