Spring:了解@SessionAttributes与@Scope('session')之间的区别

时间:2014-08-04 14:55:11

标签: spring spring-mvc

案例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是否相同?

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