案例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是否相同?
答案 0 :(得分:2)
两种方法都创建会话属性。
当使用@Scope(‘Session’)
spring确定名称时,bean不会自动填充任何控制器的模型。这是一个可以自动装配的普通bean。但是,如果您想要在单例bean中进行自动装配的当前值(当前会话中的值),则必须使用范围代理。
使用@SessionAttributes(‘employee’)
时,您声明模型属性employee
将在会话中生效。如果控制器的任何方法需要在提交后初始化属性,spring将在会话中查找属性的版本。但它不能在另一个bean中自动装配。
因此,虽然2个方法在会话中显然给出了相同的结果:employee
,但它们对应于不同的用例。
答案 1 :(得分:0)
@SessionAttributes
spring注释声明session attributes
。
这通常会列出应该透明地存储在会话中的模型属性的名称,作为后续请求之间的表单支持bean。所以它仅限于会话
While @Scope
:指定用于带注释的组件/ bean的范围。其属性可以是SINGLETON,PROTOYPE,SESSION,REQUEST
。其中默认范围为SINGLETON