2016-07-27 5 views
2

Mein Projekt ist eine Mischung aus Java-Konfiguration und XML-Konfiguration.Ich kann nicht @Autowire Feld in Java @ Konfigurationsdatei

Bitte sehen Sie sich diese Dateien an. Ich kann nicht private DataSource dataSource;

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter{ 


    @Autowired 
    private DataSource dataSource; 

    public void setDataSource(DataSource dataSource) { 
     this.dataSource = dataSource; 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
       .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER"); 
    } 

und

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 

    <mvc:annotation-driven /> 
    <context:component-scan base-package="com.packt.webstore" /> 
    <mvc:resources location="/resources/" mapping="/resource/**"/> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
     <property name="url" value="jdbc:mysql:*****" /> 
     <property name="username" value="******" /> 
     <property name="password" value="******" /> 
    </bean> 
    <bean id ="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <constructor-arg ref="dataSource"></constructor-arg> 
    </bean> 
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
     <property name="maxUploadSize" value="10240000"/> 
    </bean> 
</beans> 

ich einen Fehler beim Start der Anwendung autowire. Dies sind die Protokolldetails:

lip 27, 2016 4:59:29 PM org.apache.catalina.core.ApplicationContext log 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public javax.sql.DataSource com.packt.webstore.configuration.SecurityConfig.dataSource; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5066) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) 
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1863) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618) 
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1471) 
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) 
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1312) 
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1404) 
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:832) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) 
    at sun.rmi.transport.Transport$1.run(Transport.java:200) 
    at sun.rmi.transport.Transport$1.run(Transport.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$256(TCPTransport.java:683) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: public javax.sql.DataSource com.packt.webstore.configuration.SecurityConfig.dataSource; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 
    ... 58 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) 
    ... 60 more 

lip 27, 2016 4:59:31 PM org.apache.catalina.core.ApplicationContext log 
+0

Bitte fügen Sie weitere Informationen, wo und wann Sie den Fehler –

+0

# Ich kann nicht privat Datasource Datasource autowiere. – Przemek

+0

versuchen Sie arseniyandru Beratung, ich denke, es könnte die Lösung sein –

Antwort

0

Warum schreiben Sie nicht die Definition Ihres Bean in der Configuration-Klasse? Sie können alle Ihre Konfiguration dort haben. Sie benötigen keine applicationContext.xml und keine Configuration-Klasse.

+0

Ich möchte sowohl XML und Java-Konfiguration haben. Dies ist keine Antwort auf mein Problem. – Przemek

+0

Ihre Bean-Definition der Datenquelle in der XML-Datei ist von einem anderen Typ als die Konfigurationsdatei. Der Typ Ihrer Datenquellen-Bean ist 'org.springframework.jdbc.datasource.DriverManagerDataSource' und der Typ Ihrer @autowired-Datenquelle ist' javax.sql.DataSource', deshalb kann Spring es nicht automatisch ansteuern, weil es ' Ich finde eine Bean vom gleichen Typ. – Daniel

+0

DriverManagerDataSource IS ist eine javax.sql.DataSource, also glaube ich nicht, dass das das Problem ist (es sei denn, es ist mehr als eine DataSource definiert) –

0

Kein qualifizierendes Bean vom Typ [javax.sql.DataSource] für Abhängigkeit gefunden: erwartet mindestens 1 Bean - Es sieht so aus, als ob Ihre DataSource von einem anderen Typ ist. Gibt es eine Diskrepanz zwischen dem Typ der DataSource in Ihrer Config und XML? org.springframework.jdbc.datasource.DriverManagerDataSource und javax.sql.DataSource.

+0

Ich glaube nicht, nur für den Test lösche ich diese private DataSource dataSource und ersetzte es durch private JdbcTemplate jdbcTemplate.Nur um zu testen, ob es funktioniert (ich habe diese Bean in meiner XML-Datei definiert) und dies verursacht ein ähnliches Problem. – Przemek

0

TL; DR - Korrigieren Sie Ihren Import so, dass er mit Ihrer Bean-Definition für Ihr automatisches Objekt übereinstimmt.

Ist es möglich, dass Ihr Import für das Objekt sich von der Bean-Definition in Ihrem Quell-XML unterscheidet?

In Ausnahme, sagt es deutlich:

„Keine Warte Bohne vom Typ [javax.sql.DataSource] für Abhängigkeit gefunden: erwartet, dass mindestens 1 Bohne, die qualifiziert sich als Kandidat für autowire diese Abhängigkeit. "

Wo in Ihrer Bean Definition Ihrer Feder xml, haben Sie:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

Also, versuchen Sie Ihre Import-Anweisung beheben, um das gleiche wie die Bean Definition zu verwenden.

+0

Ich habe es gemacht, aber es hat nicht geholfen. – Przemek

2

Ich denke, Sie müssen zuerst Ihre XML-Konfiguration in Java-Konfiguration einschließen.

@ImportResource("classpath:yourconfig.xml") 
+0

auch die SetDataSource scheint redundant und das Autowired-Feld wird nie verwendet –

+0

@ImportResource ("Klassenpfad: Webstore \\ src \\ Haupt \\ Webapp \\ WEB-INF \\ Frühling \\ Webcontext \\ DispatcherServlet-Kontext.xml") Ich habe das gesagt, aber es hat nicht geholfen. Ich änderte auch die Importdefinition, um org.springframework.jdbc.datasource.DriverManagerDataSource zu importieren. Nun, es sagt, die Xml-Datei dosent existiert. – Przemek

+1

Diese Datei befindet sich nicht im Klassenpfad und Sie sollten \ in java nicht verwenden (auch wenn Sie Windows verwenden) –

Verwandte Themen