2016-09-14 229 views
0

返回null据spring ref docsjava.beans.PropertyEditorManager.findEditor(Locale.class)春季

Spring使用java.beans.PropertyEditorManager来为可能需要的属性编辑器的搜索路径。

但是我却越来越空的位置:

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import java.beans.PropertyEditor; 
import java.beans.PropertyEditorManager; 
import java.util.Locale; 

public class DefaultEditorsTest { 

    public static void main (String[] args) { 
     ApplicationContext context = new 
          ClassPathXmlApplicationContext("spring-config.xml"); 

     PropertyEditor editor = PropertyEditorManager.findEditor(Locale.class); 
     System.out.println(editor); 
    } 
} 

输出:

Sep 13, 2016 8:47:29 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]17f052a3: startup date [Tue Sep 13 20:47:29 CDT 2016]; root of context hierarchy 
Sep 13, 2016 8:47:29 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [spring-config.xml] 
null 

我的春天-config.xml中的实际注册了几个豆类。为什么我得到空?如果这不是一个正确的方法,那么如何获得Spring的LocaleEditor实例和其他?我想在一个swing应用程序中使用它,我可能会使用spring提供的很多,所以我不想手动注册它们。 在此先感谢。

回答

1

您可以使用BeanWrapperImpl中已经(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/BeanWrapperImpl.html

注:从org.springframework.beans.propertyeditors包自动寄存器的默认属性编辑器,适用于除了JDK的标准属性编辑器。

BeanWrapperImpl wrapper = new BeanWrapperImpl(bean); 
PropertyEditor editor = wrapper.getDefaultEditor(Locale.class); 
System.out.println(editor); 
+0

Thanks abaghel,that works。但据我了解,是不是有一个全球性的财产编辑登记处?从你的方法看来,编辑器每次创建bean时都会重新创建(bean包装器需要一个bean类或名称,null不起作用),这是否正确?为不同的bean创建不同的默认编辑器,可能取决于bean字段? –

+0

没有bean的BeanWrapperImpl实例也可以工作,并且会加载PropertyEditor。尝试BeanWrapperImpl wrapper = new BeanWrapperImpl(); – abaghel

+0

太棒了!那也可以。我认为这是解决我的问题的唯一最好方法。顺便说一句,我一直在努力解决更多问题。如果我在'new BeanWRapperImpl()'中使用空的构造函数,我可以获得所有已注册的默认编辑器的列表。再次感谢abaghel –