不知道抄谁的!!!
需要注入的控制器
@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);
}
}