I think there are other options (I'm presuming your non-web-aware classes run in the same container as your "web-aware" classes)...
What I have done before is have a servlet that extends HttpServlet. Have a static, private, non-final class variable representing the context; in the init method of the servlet, put
Code:
ServletClassName.context =
WebApplicationContextUtils.getRequiredWebApplicationContext(
getServletContext());
Load this custom servlet after ContextLoaderServlet/ContextLoaderListener in web.xml - so that the web application context is ensured to already be initialized. Have a static public getter (getWebApplicationContext()) to retrieve your 'context'. Therefore - no need to pass things around.
I would imagine that part of the argument against an "elegant" solution like your requesting is having dependencies wired in via Spring, instead of retrieved through the application context. The reason I had involvement in the above solution is we had classes not managed by Spring (because of their legacy beauty), but they were classes which we wanted to leverage Spring against. This may or may not be similar to constraints you are under.