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

Case1和Case 2是一样的吗?

最佳答案 两种方法都创建会话属性.

当使用@Scope(‘Session’)时,spring确定名称,并且bean不会自动填充任何控制器的模型.这是一个可以自动装配的普通bean.但是,如果您想要在单例bean中进行自动装配的当前值(当前会话中的值),则必须使用范围代理.

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

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

点赞