情况1:
@Scope(‘Session’)
public class Employee{
//..
}
@Controller
public class EmployeeController {
@Autowired
private Employee employee;
//..
}
}
案例2:
@Controller
@SessionAttributes("employee")
public class EmployeeController {
@ModelAttribute
public void addEmployee(){
//..
}
}
Case1和Case 2是一样的吗?
最佳答案 两种方法都创建会话属性.
当使用@Scope(‘Session’)时,spring确定名称,并且bean不会自动填充任何控制器的模型.这是一个可以自动装配的普通bean.但是,如果您想要在单例bean中进行自动装配的当前值(当前会话中的值),则必须使用范围代理.
使用@SessionAttributes(’employee’)时,您声明模型属性employee将存在于会话中.如果控制器的任何方法需要在提交后初始化属性,spring将在会话中查找属性的版本.但它不能在另一个bean中自动装配.
因此,尽管这两种方法显然给出了相同的结果:员工在会话中,它们对应于不同的用例.