2017-05-16 10 views
0

コントローラを定義し、HttpSessionオブジェクトを宣言する必要があります。私はそれをオートワイヤリングするか、メソッドとしてオブジェクトとして渡すことができます。 2つのオプションの違いは何ですか?どちらが好ましいですか?コントローラでHttpSessionオブジェクトを宣言する

オプションコントローラで1つの

@Controller 
public class UserController { 

    @Autowired 
    HttpSession session; 
    .. 
    .. 
} 

オプション2

@Controller 
public class UserController { 

    @RequestMapping(value="/user", method=RequestMethod.GET) 
    public @ResponseBody User getUser(HttpSession session) { 
    .. 
    .. 
    } 
} 

答えて

3

、あなたはオプション2を使用する必要があります。

セッションはhttp要求の開始から終了し、要求が停止するまで終了しますが、アプリケーションが停止するまでコントローラは使用可能です。だからあなたはコントローラーのHttpSessionを自作してはいけません。

あなたがそのようなHTTPセッションをautowiredできる状況の一:

@Component 
@Scope(value=WebApplicationContext.SCOPE_SESSION) 
public class CurrentUserHolder{ 

    @Autowired 
    private HttpSession session; 

    public User currentUser() { 
     return this.get(); 
    } 

    @Override 
    public User get() { 
     return (User)session.getAttribute("currentUser"); 
    } 
} 

だから、あなたがセッションを得ることができないサービスで、現在のユーザーを取得することができます:あなたが持っている場合は

@Service 
public class UserService{ 
    private @Autowired CurrentUserHolder currentUserHolder; 
    ...... 
} 
0

をHttpSessionを必要とするコントローラの複数のメソッドは、オプション1が優先されます。それ以外の場合は、すべての方法でパラメータ化するのではなく、「オプション2」を使用することができます。

関連する問題