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


问题内容

情况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(){
      //..
  }
}

案例1和案例2是否相同?


问题答案:

两种方法都创建一个会话属性。

使用@Scope(‘Session’)spring
时,将确定名称,并且bean不会自动填充任何控制器的模型。它是可以自动装配的普通bean。但是,如果要在单例bean中自动装配当前值(当前会话中的当前值),则必须使用scope-
proxy。

使用时,@SessionAttributes(‘employee’)您声明模型属性employee将存在于会话中。如果控制器的任何方法需要在提交后初始化属性,则spring将在会话中查找该属性的版本。但是它不能自动连接到另一个bean中。

因此,尽管这两种方法显然给出了相同的结果:employee在会话中,它们对应于不同的用例。