有一业务需要在 在 Linstener 中 调用 spring 的 bean,当然是用WebApplicationContextUtils
但是在用的过程中
ServletContext sc = event.getSession().getServletContext();
log.debug(sc);
ApplicationContext ac =WebApplicationContextUtils.getWebApplicationContext(sc);
log.debug(ac);
Object obj =ac.getBean("userManagerService");
log.debug(obj);
UserManagerService ms = (UserManagerService)(obj);
结果一直抱一下异常,ClassCaseException
把obj打印出来后发现就是一个UserManagerService的对象,百思不得其解
后来发现 异常里有一个 proxy才恍然大悟,原来这个service做了事务的代理,拿到的这个obj是一个动态代理对象
怪不得强转不行啊,这样做就行了
ServletContext sc = event.getSession().getServletContext();
log.debug(sc);
ApplicationContext ac =WebApplicationContextUtils.getWebApplicationContext(sc);
log.debug(ac);
Object obj =ac.getBean("userManagerService");
log.debug(obj);
Method m = obj.getClass().getMethod("updateOnline",user.getClass());
m.invoke(obj, user);
呵呵。