gpt4 book ai didi

java - @scope - spring - 使用注释设置范围 "prototype",表现得像单例。我哪里错了?

转载 作者:行者123 更新时间:2023-11-30 08:34:39 24 4
gpt4 key购买 nike

当我尝试在一个类上使用@scope("prototype") 时,我发现它的行为类似于“单例”,我不确定我哪里错了。非常感谢对此的任何帮助。

员工类-设置范围-原型(prototype)

 import org.springframework.context.annotation.Scope; 
@Scope("prototype")
public class Employee {

private String emp_name;
public String getEmp_name() {
return emp_name;
}

public void setEmp_name(String emp_name) {
this.emp_name = emp_name;
}
}

部门类-设置作用域-单例

import org.springframework.context.annotation.Scope;
@Scope("singleton")
public class Department {
private String dep_name;

public String getDep_name() {
return dep_name;
}
public void setDep_name(String dep_name) {
this.dep_name = dep_name;
}

Beans.xml

<context:component-scan base-package="com"/> 

<!-- Scope Annotations -->
<bean id="dep_scope" class="com.scope.annotation.Department" >
</bean>
<bean id="emp_scope" class="com.scope.annotation.Employee" >
</bean>

主应用

public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

Employee emp = (Employee) context.getBean("emp_scope");
emp.setEmp_name("Saro");
System.out.println("first"+emp.getEmp_name());

Employee emp2 = (Employee) context.getBean("emp_scope");
System.out.println("second"+emp2.getEmp_name());

Department dep = (Department) context.getBean("dep_scope");
dep.setDep_name("Maths");
System.out.println("first"+dep.getDep_name());

Department dep2 = (Department) context.getBean("dep_scope");
System.out.println("second"+dep2.getDep_name());
}
}

输出:

第一萨罗第二个萨罗第一数学第二数学

I expected secondnull instead of secondSaro

最佳答案

只需尝试在 bean 标记中的 beans.xml 文件中定义范围....您同时使用注释和 xml ...只需使用其中之一..

或者你可以尝试使用注解来定义bean ...为此,您可以使用 @Bean 注释。

@Configuration
public class Config {

@Bean(scope=DefaultScopes.PROTOTYPE)
public TestBean testBean(){
return new TestBean();
}
}

在你的主要逻辑中你可以使用下面的代码

TestBean testBean = ctx.getBean(TestBean.class);

关于java - @scope - spring - 使用注释设置范围 "prototype",表现得像单例。我哪里错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38743704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com