Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在spring控制器中注入特殊的重定向视图?_Spring_Spring Mvc - Fatal编程技术网

如何在spring控制器中注入特殊的重定向视图?

如何在spring控制器中注入特殊的重定向视图?,spring,spring-mvc,Spring,Spring Mvc,我想在控制器中获得一个特别准备的RedirectView实例: @Controller public class MyController { @RequestMapping(value = "/", method = GET) public RedirectView myFkt(@Named("myName") RedirectView rv) { return rv; } 我的配置: @Configuration @EnableWebMvc @ComponentScan

我想在控制器中获得一个特别准备的RedirectView实例:

@Controller
public class MyController {
  @RequestMapping(value = "/", method = GET)
  public RedirectView myFkt(@Named("myName") RedirectView rv) {
    return rv;
  }
我的配置:

@Configuration
@EnableWebMvc
@ComponentScan({"com.example"})
public class SpringServletConfig extends WebMvcConfigurerAdapter {
    private static final Logger LOG = LoggerFactory.getLogger(WebMvcConfigurerAdapter.class);

    @Bean(name = "myName") @Scope("request")
    public RedirectView myName() {
        RedirectView rv = new RedirectView("/");
        rv.setContextRelative(true);
        return rv;
    }

}

在控制器函数中,我将始终获得一个未配置的RedirectView实例,而不是我配置的实例。

AFAIK没有
HandlerMethodArgumentResolver
来解析处理程序方法中的
@命名
参数。你可以自己写和注册,但这很麻烦

为什么不把它作为成员变量注入呢

@Controller
public class MyController {

    @Resource("myName")
    private RedirectView rv;

    @RequestMapping(value = "/", method = GET)
    public RedirectView myFkt() {
        return rv;
    }
}

为重定向创建@RequestMapping,并将其添加到带有@ControllerAdvice注释的控制器,该控制器将由整个应用程序使用。

首先更改bean的配置,以便在
@Scope
注释中包含
proxyMode
属性。这将使其成为作用域代理,您希望保留该类型,因此需要基于类的代理(这需要cglib)

在这一更改之后,您可以像通常那样简单地将bean注入
@Controller
。假设您配置了一个
重定向视图
,只需使用
@Autowired
插入作用域代理即可。(否则请使用带有名称的
@Resource
,或添加
@限定符
注释)


为什么不让自定义视图解析器处理您的特殊视图?
@Bean(name = "myName") 
@Scope(value="request", proxyMode=ScopedProxyMode.TARGET_CLASS) 
public RedirectView myName() {
    RedirectView rv = new RedirectView("/");
    rv.setContextRelative(true);
    return rv;
}
@Controller
public class MyController {

    @Autowired
    private RedirectView rv;

    @RequestMapping(value = "/", method = GET)
    public RedirectView myFkt() {
       return rv;
    }
}