Spring控制层方法注入参数

 不知道抄谁的!!!

需要注入的控制器

@Controller
@SelfParam
public class AccCtrl {

	@RequestMapping("/test.do")
	@ResponseBody
	public String ss(Apple app,Banana banana){
		System.out.println(app);
		System.out.println(banana);
		return "index";
	}
	
	@RequestMapping("/test2.do")
	@ResponseBody
	public String ss2(Apple app,Banana banana){
		System.out.println(app);
		System.out.println(banana);
		return "index";
	}
}

 需要注入的参数演示1:

public class Apple {

	private String name;
	private Integer id;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Apple(String name, Integer id) {
		this.name = name;
		this.id = id;
	}
}

需要注入的参数演示2:

public class Banana {

}

自定义注解:

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SelfParam {

}

这个是重点

public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver{
	public MyHandlerMethodArgumentResolver(){
		System.out.println("init");
	}
	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		Class<?> declaringClass = parameter.getDeclaringClass();
		SelfParam selfParam = declaringClass.getAnnotation(SelfParam.class);
		if(selfParam!=null){
			return true;
		}
		else{
			SelfParam selfParam2 = parameter.getMethodAnnotation(SelfParam.class);
			if(selfParam2!=null){
				return true;
			}
		}
		return false;
	}
	@Override
	public Object resolveArgument(MethodParameter parameter,
			ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
			WebDataBinderFactory binderFactory) throws Exception {
		if(parameter.getParameterType().equals(Apple.class)){
			return new Apple("app",1);
		}
		else if (parameter.getParameterType().equals(Banana.class)) {
			return new Banana();
		}
		else{
			return null;
		}
	}
}

application.xml配置

<mvc:annotation-driven>   
        <mvc:argument-resolvers>
            <bean class="com.cc.register.MyHandlerMethodArgumentResolver"></bean>
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

Spring-boot的话酱紫配置:

@Configuration
public class MyParamRegist extends WebMvcConfigurerAdapter{

	@Override
	public void addArgumentResolvers(
			List<HandlerMethodArgumentResolver> argumentResolvers) {
		argumentResolvers.add(new MyMethodArgumentResolver());
		super.addArgumentResolvers(argumentResolvers);
	}
}

猜你喜欢

转载自blog.csdn.net/u011492805/article/details/89248973