我参与了一个 jsp/servlet 应用程序。应用程序存储会话或请求中所需的对象。但是,可以将同一对象注入到多个位置的会话或请求中。换句话说,而不是写
HomeBean homeBean = (HomeBean) request.getSession(false).getAttribute("homeBean");
我会写
HomeBean homeBean = BeanStore.getHomeBean();
我是过度思考还是过度设计?
我参与了一个 jsp/servlet 应用程序。应用程序存储会话或请求中所需的对象。但是,可以将同一对象注入到多个位置的会话或请求中。换句话说,而不是写
HomeBean homeBean = (HomeBean) request.getSession(false).getAttribute("homeBean");
我会写
HomeBean homeBean = BeanStore.getHomeBean();
我是过度思考还是过度设计?
在spring或cdi等一些框架中,您可以将会话甚至某些会话属性直接注入您的业务组件,例如:
@Inject
private HomeBean homeBean;
此外,无需使用 HTTP 会话访问代码污染您的代码,只需获取一次对象并在需要的地方传递它。它将使阅读和测试更容易。
请注意,BeanStore.getHomeBean()
如果您真的不想HttpSession
直接通过,您真的很难正确编写。Servlet 过滤器ThreadLocal
,我来了!更不用说我觉得这样的静态“工厂”非常难看。
旁注,在:
request.getSession(false).getAttribute("homeBean")
request.getSession(false)
会经常回来null
,留给你讨厌NullPointerException
。在这种情况下,首选true
或根本没有参数。