关于 <mvc:argument-resolvers> 的一次使用记录
使用场景: 项目里面在做一个请求时候发现,不同的请求,有些请求会跳转到 spring mvc的自定义方法中,有些却不进去。自定义的方法:
<mvc:annotation-driven >
<mvc:argument-resolvers>
<bean class="com.zhuanche.car.web.resolver.AdminBaseFormArgumentResolver">
<property name="adminSessionUserManager" ref="adminSessionUserManager"/>
</bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>
AdminBaseFormArgumentResolver 方法:
public class AdminBaseFormArgumentResolver extends BaseFormArgumentResolver { private static final Logger logger = LoggerFactory.getLogger(AdminBaseFormArgumentResolver.class); AdminSessionUserManager adminSessionUserManager; @Override protected SessionUser getSessionUser(NativeWebRequest webRequest) { if(SecurityUtils.getSubject().isAuthenticated()){ String username = (String) SecurityUtils.getSubject().getPrincipal(); logger.debug("username = {}", username); return adminSessionUserManager.getSessionUser(username); } throw new UnauthenticatedException("当前用户未登录"); } @Override public void afterPropertiesSet() throws Exception { Assert.notNull(this.adminSessionUserManager, "property adminSessionUserManager is required."); } public void setAdminSessionUserManager(AdminSessionUserManager adminSessionUserManager) { this.adminSessionUserManager = adminSessionUserManager; } }
上网搜了后就,最终明白:这个方法是和 传的参数有关系,只要带有某一些参数或者特定的注解,就会进入自定义的方法。如果不带有,则不会进入。但是原理 真心不太明白,而且也不知道 在哪里控制的。下面的文章有类似的用法:
https://blog.csdn.net/lqzkcx3/article/details/78794636