日期:2014-05-20  浏览次数:20909 次

spring配置一个动态属性值问题
<bean id="xxPageController"
class="PageQueryController">
<property name="pageLogic" ref="pageLogic" />
<property name="userId" value=" " />
</bean>
这个主要是想根据登陆用户的ID查询数据,这个userId是一个属性字段,表示当前登陆用的ID。所以value的值是随着不同用户的登录而变化。
我应该怎么写才能在这里引用或者赋予当前登陆用户的ID在这个userId里。
事先说明我做的应用暂时不能在页面传参数的,但是登陆时候用session把当前登陆的用户信息保存了。
请哪位高人帮忙解决下问题。

------解决方案--------------------
你这样的话估计会引起线程安全问题
------解决方案--------------------
大哥,你完全违反了spring的IOC原理,spring的property是注入经常不变化的参数,变化的参数那你直接从session取值就可以了,何必还需要注入呢?
------解决方案--------------------
session.setAttribute("user",用户);
------解决方案--------------------
你非要这么做,也不是没有办法
1、定义一个Filter,通过它在web.xml中拦截所有与xxPageController有关的url
public UserFilter implements Filter{
static ThreadLocal <String> username=new ThreadLocal <String>();
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
username.set((String)((HttpServletRequest)request).getSession(true).getAttribute("user"));//将用户名存入当前线程变量
chain.doFilter(request,response);
}
}


、spring中有个FactoryBean接口,定义一个类实现这个接口,将它的getObject方法返回一个PageQueryController对象。用这个类代替你在xml中配置的PageQueryController对象

public PageQueryControllerFactoryBean implements FactoryBean{
................
public Object getObject(){
String username=UserFilter.username.get();//这里得到用户名
//在这里通过用户名和其它参数构造PageQueryController对象
}
..........



------解决方案--------------------