Java 带参数的Spring@Bean方法:该方法的客户端如何知道它们?
如您所知,我们可以按如下方式创建singleton 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"))
@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框架本身。