2014-04-04 40 views
4

我不確定我的代碼是否線程安全,任何人都可以提供幫助?在春季AOP獲取會話

@Aspect 
public class MyAspect { 

    @Autowired 
    private HttpSession session; 


    @Before("...") 
    private void myMethod() { 
     seesion.getId(); 
    } 

} 

因爲MyAspect的範圍是默認值(單),在相同的時間,也有很多session.OK,這會我在我的代碼得到這麼多的要求exsits嗎?它是線程安全的嗎?或者這是一個錯誤的代碼,如果這是錯的,我該怎麼辦?

謝謝!

回答

5

沒錯,沒關係。

  1. MyAspect本來也應該註冊爲豆。

  2. 它沒關係是不是AOP看點與否:依賴注入基礎結構相同。

  3. 現在約爲HttpSession。 這個對象沒有註冊爲bean,但是對於他來說Spring提供了一個技巧 - WebApplicationContextUtils.SessionObjectFactory。該對象被註冊爲

beanFactory.registerResolvableDependency(HttpSession.class, new SessionObjectFactory());

而當注入工作它所包裝SessionObjectFactoryProxyThreadLocal<RequestAttributes>變量調用按需實時方法。這意味着如果您當前的線程是Servlet線程,那麼您的MyAspect.myMethod的每個調用都會執行具體的內容HttpSession

那麼,你的問題的答案:是的,它是線程安全

+0

謝謝Artem!很好的答案! – yybcjq