2017-03-03 1 views
0

ich folgende Fehlermeldung, wenn ich Zugang in Hauptseite versucheFehler beim Erstellen der Bohne mit dem Namen ‚Userservice‘: Unbefriedigend Abhängigkeit durch Feld ausgedrückt ‚userJpaRepository‘

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userService': Unsatisfied dependency expressed through field 'userJpaRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'net.codejava.spring.repository.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=userJpaRepository)} 

In meinem Usercontroller Ich habe den Code folgenden

@Controller 
public class UserController { 

    private UserService employeeServiceImpl; 

    @RequestMapping("/") 
    public String employee() { 
     this.employeeServiceImpl.listAlUsers(); 
     return "employee"; 
    } 

    @Autowired(required = true) 
    public void setEmployeeService(UserService employeeServiceImpl) { 
     this.employeeServiceImpl = employeeServiceImpl; 
    } 

} 

Mein Userservice

public interface UserService { 
    public abstract List<User> listAlUsers(); 
    public abstract User addUser(User user); 
    public abstract int removeUser(int id); 
    public abstract User updateUser(User user); 
} 

Mein UserServiceImpl

@Service("userService") 
public class UserServiceImpl implements UserService { 

    @Autowired 
    @Qualifier("userJpaRepository") 
    private UserRepository userJpaRepository; 

    @Override 
    public List<User> listAlUsers() { 
     return userJpaRepository.findAll(); 
    } 

    @Override 
    public User addUser(User user) { 
     return userJpaRepository.save(user); 
    } 

    @Override 
    public int removeUser(int id) { 
     userJpaRepository.delete(id); 
     return 0; 
    } 

    @Override 
    public User updateUser(User user) { 
     return userJpaRepository.save(user); 
    } 
} 

Mein JpaRepository

@Repository("userJpaRepository") 
public interface UserRepository extends JpaRepository<User,Serializable> { 

} 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/root-context.xml</param-value> 
    </context-param> 

    <!-- Creates the Spring Container shared by all Servlets and Filters --> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Processes application requests --> 
    <servlet> 
     <servlet-name>appServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>appServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

Mein Servlet-Kontext

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 

    <!--The <context:component-scan...> tag will be use to activate Spring MVC annotation scanning capability which allows to make use of annotations like @Controller and @RequestMapping etc.--> 
    <!--Step 1 : HandlerMapping --> 
    <context:component-scan base-package="com.loiane.controller" /> 

    <!--JPA Repository--> 

    <jpa:repositories base-package="com.loiane.repository.EmployeeJpaRepository"/> 

    <mvc:annotation-driven /> 

    <!--Step 3 : View Resolver--> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/views/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 


    <!--Bundles--> 
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
     <property name="basename"> 
      <value>messages</value> 
     </property> 
    </bean> 

    <!--Declaramos el interceptor para permitir el cambio de idioa en tiempo de ejecucion--> 
    <mvc:interceptors> 
     <mvc:interceptor> 
      <mvc:mapping path="/**" /> 
      <bean id="localeChangeInterceptor" 
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
       <property name="paramName" value="lang" /> 
      </bean> 
     </mvc:interceptor> 
    </mvc:interceptors> 

    <!--Si el idioma no existe cargamos el en--> 

    <bean id="localeResolver" 
      class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> 
     <property name="cookieName" value="lang" /> 
     <property name="defaultLocale" value="en" /> 
    </bean> 

</beans> 

Die Wurzel-Kontext ist leer.

Ich weiß nicht, wo ist die mögliche Fehlerursache Ich versuche, differents Optionen zu finden, aber wenn ich das DAO-Muster verwende, erhalte ich den gleichen Fehler, also würde ich wissen, welches Problem zu versuchen ist, es zu lösen .

Die Konfiguration des Projekts ist mit XML, aber ich denke, es ist nicht wichtig, diese Situation zu lösen.

Grüße!

+0

XML ist sehr wichtig, dies zu lösen, wie das Problem, weil zu scannen Das Repository wird nicht autowired, also poste es bitte. Sie verwenden überall Anmerkungen, die nicht sicher sind, warum Sie XML-Konfiguration verwenden wollten. – lsiva

+0

Korrekt, verwende ich Annotation, um diese zu verwenden, denke ich, dass Bean nicht in xml deklariert wird, aus diesem Grund habe ich das Problem, ich muss schlafen ... hahaa – jc1992

+0

warum haben Sie ' 'Wenn Sie' component-scan' in der Datei servlet-context.xml verwenden, befinden sich diese Dienste und das Repository in demselben Projekt oder in einem anderen Projekt –

Antwort

0

Sie verwenden den Name des Bean-Qualifizierers für die Repository-Schnittstelle @Repository("userJpaRepository"). Qualifier-Namen sind nützlich, wenn mehr als 1 Klasse die Common Interface implementiert. Es hilft, die spezifische Bean aufzulösen, die an die Schnittstellenvariable einer anderen Bean autowiriert werden soll. Wird es an einer Schnittstelle deklariert, wird sein Zweck verfehlt. Das Entfernen des Qualifikationsmerkmals-Namens sollte funktionieren, wenn keine andere Klasse (mit Ausnahme der von Spring erstellten Proxy-Bean, deren Name userRepositoryImpl lautet) eine UserRepository Schnittstelle implementiert.

@Autowired 
private UserRepository userJpaRepository; 

Und ersetzen Sie das Serializable durch den Datentyp der ID-Spalte wie Integer oder Idclass.

@Repository 
public interface UserRepository extends JpaRepository<User,Integer> { 

} 

Jetzt Feder zu ermöglichen, für die Schnittstelle, soweit seine vordefinierte Repository-Schnittstellen zu scannen, Paket hinzufügen, für Kontext im Frühjahr

xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/data/jpa 
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 

    <jpa:repositories base-package="net.codejava.spring.repository"/> 
Verwandte Themen