public class ContextArgResolver implements WebArgumentResolver { 
    private static final String MY_APPLICATION_CONTEXT = "MYAPPLICATIONCONTEXT"; 
    
    @Override 
    public Object resolveArgument(MethodParameter methodParameter,NativeWebRequest webRequest) throws Exception { 
        if (methodParameter.getParameterType() == MyApplicationContext.class) { 
            return webRequest.getAttribute(MY_APPLICATION_CONTEXT, RequestAttributes.SCOPE_SESSION); 
        } 
        return UNRESOLVED; 
    }
}
配置文件的相关配置如下:
<bean> 
        <property> 
            <list> 
                <ref bean="jacksonConverter"/> 
            </list> 
        </property> 
        <property> 
            <list> 
                <ref bean="contextArgResolver"/> 
            </list> 
        </property> 
</bean> 
<bean></bean> 
<bean> 
    <property> 
        <list> 
            <value>application/json;charset=UTF-8</value> 
        </list> 
    </property> 
</bean>
优点: 
1. 具备第二种方案的所有优点 
2. 真正做到了按需分配,只在真正需要对象的位置注入具体的对象,减少其他地方对该对象的依赖。 
3. 其他人能很容易地从方法的参数列表得知方法所需要的依赖,API 更清晰易懂。 
4. 对于很多方法需要的某一类参数,可以在唯一的设置点用很方便一致的方式进行注入。 
不足: 
1. 对象依赖注入是针对所有方法的,注入粒度还是较粗。不能做到具体方法访问具体的自定义上下文属性;
以上三种方法,在前后端统一的时候是好用的,但是如果遇到前后端分离的时候,就会变得很痛苦!

