SpringMVC中自定义上下文认识(3)


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. 对象依赖注入是针对所有方法的,注入粒度还是较粗。不能做到具体方法访问具体的自定义上下文属性;

以上三种方法,在前后端统一的时候是好用的,但是如果遇到前后端分离的时候,就会变得很痛苦!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4436ab2c382db0617dfae4e6a72c6952.html