2014-04-04 103 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