我是spring的新手,我正在尝试修改我的应用程序来实现spring框架。我的请求是为每一个新请求创建一个新bean,然后在后面的代码中引用该bean,以便从单个bean中为其设置值。我正在尝试将bean声明为prototype,并使用查找方法在我的单例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
}
当我从singleton PersonTransaction类调用createContext时,它应该创建新的原型bean,然后如何通过调用getContext()方法获得创建的原型bean(我想我正在做的是.btContext再次返回新bean!!)。
稍后需要帮助获取创建的原型bean以设置值。
您希望创建一个请求作用域bean,而不是原型作用域bean。看看Spring Bean作用域的快速指南,它描述了不同的Bean作用域,包括请求作用域:
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public PersonContext personContext() {
return new PersonContext();
}
这应该会简化您的逻辑,只要您可以在处理请求后丢弃bean。
因此,关于原型范围的bean,我知道spring只是在将其移交给请求的bean之前将其进行生命周期处理。如果忘记了它。而且从逻辑上我可以理解,因为它是原型,它将只被每个请求使用(是的,不是http请求)但是spring容器为什么不保留原型bean的引用来管理完整的生命周期呢?
当使用Spring Framework时,我怀疑在下面提到的场景中会创建多少实例: bean配置如下 默认情况下,bean“a”具有。因此,有一个单例bean引用了一个具有会话范围或原型范围的bean。 在这种情况下,如果有2个对应用程序的同时请求,那么将创建多少个A实例和多少个B实例? 如果有人能解释这是如何工作的,那将是非常有帮助的。 谢了达薇亚
我正在尝试基于此示例编写自己的代码。 我使用的是Spring Boot,所有依赖项都来自https://start.spring.io/ 这是我的知识库: 我的控制器的一部分: 我的Spring Boot: 我收到此错误: 我做错了什么?如果有必要,我可以发布更多类似实体的代码 我正在使用IntelliJ IDEA。
我对JAVA web应用程序非常陌生,所以请记住这一点。我承担了一个非常大的项目,令人望而生畏。我终于修复了Maven依赖,现在在Tomcat上运行时遇到了第一个错误。 包含eu.digient.billfold.goshgame.game.level.ItemConfigFactoryImpl模块的Spring配置:
我有一个关于Spring注释配置的问题。我有一颗豆子:
我是spring及其概念的初学者。我试图使用@Configuration和package scan注释来扫描单个包下的一些bean提供程序类。当其中一个类的@Bean注释方法与另一个不同类的@Bean注释方法同名时,两个类都不会创建Bean。如果我将@bean注释的方法名称更改为未创建的bean的另一个名称,那么两个bean都会成功创建。无法理解这种行为。 如果我正在创建另一个类,如顶部下面的Be