Nuovi aggiornamenti: Dec 31 2010 8:15 PM
Correzione molto sporca, ma questo è il modo in cui ho temporaneamente fatto funzionare il messaggio Source. Ho cambiato la mia classe Controller per passare 'messageSource' alla classe Message e sono in grado di recuperare i messaggi. Si prega di rivedere la definizione della classe qui sotto e fammi sapere ulteriori informazioni che potrebbe essere necessario per aiutare. Apprezzo molto tutto l'aiuto che stai fornendo.Spring @Autowired messageSource funziona in Controller ma non in altre classi?
Dec 31 2010 3 PM
Poiché non sono riuscito a configurare messageSource tramite le annotazioni, ho tentato di configurare l'iniezione messageSource tramite servlet-context.xml. Ho ancora messageSource come null. Per favore fatemi sapere se avete bisogno di ulteriori informazioni specifiche, e vi fornirò. Grazie per il vostro aiuto in anticipo.
servlet-context.xml
<beans:bean id="message"
class="com.mycompany.myapp.domain.common.message.Message">
<beans:property name="messageSource" ref="messageSource" />
</beans:bean>
Spring fornisce il seguente messaggio di informazioni sull'inizializzazione della molla.
INFO : org.springframework.context.annotation.ClassPathBeanDefinitionScanner - JSR-330 'javax.inject.Named' annotation found and supported for component scanning
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Overriding bean definition for bean 'message': replacing [Generic bean: class [com.mycompany.myapp.domain.common.message.Message]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [C:\springsource\tc-server-developer-2.1.0.RELEASE\spring-insight-instance\wtpwebapps\myapp\WEB-INF\classes\com\mycompany\myapp\domain\common\message\Message.class]] with [Generic bean: class [com.mycompany.myapp.domain.common.message.Message]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]]
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]1c7caac5: defining beans [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,xxxDao,message,xxxService,jsonDateSerializer,xxxController,homeController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,tilesViewResolver,tilesConfigurer,messageSource,org.springframework.web.servlet.handler.MappedInterceptor#1,localeResolver,org.springframework.web.servlet.view.ContentNegotiatingViewResolver#0,validator,resourceBundleLocator,messageInterpolator]; parent: org.s[email protected]4f47af3
devo la definizione di seguito per sorgente del messaggio in 3 classi. In modalità di debug, posso vedere che nella classe xxxController
, messageSource
viene inizializzato su org.springframework.context.support.ReloadableResourceBundleMessageSource
. Ho annotato la classe Message con @Component e xxxHibernateDaoplpl con @Repository. Ho anche incluso la definizione del namespace di contesto in servlet-context.xml. Ma nella classe Message
e nella classe xxxHibernateDaoImpl
, lo messageSource
è ancora nullo.
Perché il messaggio Spring non viene inizializzato? Nelle altre due classi, sebbene nelle classi xxxController
, viene inizializzato correttamente?
@Controller
public class xxxController{
@Autowired
private ReloadableResourceBundleMessageSource messageSource;
}
@Component
public class Message{
@Autowired
private ReloadableResourceBundleMessageSource messageSource;
}
@Repository("xxxDao")
public class xxxHibernateDaoImpl{
@Autowired
private ReloadableResourceBundleMessageSource messageSource;
}
<beans:beans
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<beans:property name="basename" value="/resources/messages/messages" />
</beans:bean>
<context:component-scan base-package="com.mycompany.myapp"/>
</beans>
Come hai dichiarato quelle classi a Spring? – skaffman
Sì. Ho dichiarato quelle lezioni a primavera. Si prega di vedere la definizione aggiornata sopra. – Jayaprakash