Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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
Java 带参数的Spring@Bean方法:该方法的客户端如何知道它们?_Java_Spring_Spring Mvc - Fatal编程技术网

Java 带参数的Spring@Bean方法:该方法的客户端如何知道它们?

Java 带参数的Spring@Bean方法:该方法的客户端如何知道它们?,java,spring,spring-mvc,Java,Spring,Spring Mvc,如您所知,我们可以按如下方式创建singleton bean: @Bean(name = "localeResolver") public LocaleResolver cookieLocaleResolver() { CookieLocaleResolver localeResolver = new CookieLocaleResolver(); localeResolver.setDefaultLocale(new Locale("ko"))

如您所知,我们可以按如下方式创建singleton bean:

    @Bean(name = "localeResolver")
    public LocaleResolver cookieLocaleResolver() {

        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setDefaultLocale(new Locale("ko"));

        return localeResolver;
    }
但是对于ContentNegotiationResolver,我们建议从spring 3.2开始使用以下代码来实例化默认ContentNegotiationResolver

    @Bean
    public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) {

        ContentNegotiatingViewResolver contentNegotiatingViewResolver = new ContentNegotiatingViewResolver();
        contentNegotiatingViewResolver.setOrder(0);
        contentNegotiatingViewResolver.setContentNegotiationManager(manager);

        List<View> views = new ArrayList<View>();
        views.add(new MappingJackson2JsonView());
        contentNegotiatingViewResolver.setDefaultViews(views);

        return contentNegotiatingViewResolver;
    }
@Bean
公共视图解析程序contentnegotingviewresolver(ContentNegotiationManager){
contentnegotingviewresolver contentnegotingviewresolver=新contentnegotingviewresolver();
contentnegotingviewresolver.setOrder(0);
contentnegotingviewresolver.setContentNegotiationManager(manager);
列表视图=新建ArrayList();
添加(新映射jackson2jsonview());
contentnegotingviewresolver.setdefaultview(视图);
返回contentnegotingviewresolver;
}
如您所见,上述方法具有参数ContentNegotiationManager。
这里是我的问题:上述
@bean
方法的客户端如何创建参数?客户端向参数
ContentNegotiationManager
注入哪些属性值?
spring框架被指示创建ContentNegotiationbean,而不是ContentNegotiationManager


提前感谢您。

如果您将ContentNegotingViewResolver放置在spring上下文中,并且它需要ContentNegotiationManager作为构造函数参数,那么您别无选择,只能注入一个也存在于spring上下文中的参数

如果您想让客户端指定ContentNegotiationManager,那么您需要返回一个类,其中包含客户端可以调用的方法。我能想到的最简单的方法是将创建ViewResolver的方法包装在一个简单的类中,可能用@component注释进行注释,如下所示:

@Component
public class MyViewResolver {

    List<View> views = new ArrayList<View>();

    public ViewResolver getResolver(ContentNegotiationManager manager) {

            ContentNegotiatingViewResolver contentNegotiatingViewResolver = new ContentNegotiatingViewResolver();
            contentNegotiatingViewResolver.setOrder(0);
            contentNegotiatingViewResolver.setContentNegotiationManager(manager);

            List<View> views = new ArrayList<View>();
            views.add(new CommonMappingJackson2JsonView());
            contentNegotiatingViewResolver.setDefaultViews(views);

            return contentNegotiatingViewResolver;

    }

}
@组件
公共类MyViewResolver{
列表视图=新建ArrayList();
公共视图解析程序getResolver(ContentNegotiationManager){
contentnegotingviewresolver contentnegotingviewresolver=新contentnegotingviewresolver();
contentnegotingviewresolver.setOrder(0);
contentnegotingviewresolver.setContentNegotiationManager(manager);
列表视图=新建ArrayList();
添加(新的CommonMappingJackson2JsonView());
contentnegotingviewresolver.setdefaultview(视图);
返回contentnegotingviewresolver;
}
}

你是因为它不起作用而问,还是因为它起作用而问它是如何起作用的?这里的客户机是Spring框架本身。