@Autocâblés - Pas de qualification bean de type trouvé pour la dépendance au moins 1 fève
Actuellement, je suis confronté à un problème dans Autowire de configuration entre le contrôleur et la couche de service.
Je suis incapable de faire le suivi de mes erreurs.
Simple Journal Info
SEVERE: Exception while loading the app
SEVERE: Undeployment failed for context /OTT
SEVERE: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [com.ott.service.EmployeeService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
Ci-dessous j'ai également donné le Contrôleur et la Couche de Service code et aussi le dispatcher-servlet.xml
Contrôleur
package com.ott.controller;
import com.ott.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
*
* @author SPAR
*/
@Controller
public class AdminController {
private EmployeeService employeeService;
@RequestMapping("/employee")
public String employee(){
this.employeeService.fetchAll();
return "employee";
}
@Autowired(required = true)
@Qualifier(value="employeeService")
public void setEmployeeService(EmployeeService empService) {
this.employeeService = empService;
}
}
Interface De Service
package com.ott.service;
import com.ott.hibernate.Employee;
import java.util.List;
/**
*
* @author SPAR
*/
public interface EmployeeService {
List<Employee> fetchAll();
}
Interface De Service Impl
package com.ott.service;
import com.ott.dao.EmployeeDAO;
import com.ott.hibernate.Employee;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @author SPAR
*/
@Service
public class EmployeeServiceImpl implements EmployeeService{
private EmployeeDAO employeeDAO;
@Override
@Transactional(readOnly = true)
public List<Employee> fetchAll() {
List<Employee> employees = employeeDAO.fetchAll();
for (Employee employee : employees) {
System.out.println("Name : "+employee.getFirst_Name() +" "+ employee.getLast_Name());
System.out.println("Email Id : "+employee.getEmail_Id());
}
return employees;
}
@Autowired(required = true)
@Qualifier(value="employeeDAO")
public void setEmployeeDAO(EmployeeDAO empDAO) {
this.employeeDAO = empDAO;
}
}
Dispatcher-servlet.xml
<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.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">
<context:component-scan base-package="com.ott.controller"/>
<context:component-scan base-package="com.ott.hibernate"/>
<context:component-scan base-package="com.ott.service"/>
<context:component-scan base-package="com.ott.dao"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<mvc:resources mapping="/resources/**" location="/resources/" />
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles-def/general-layout.xml</value>
</list>
</property>
</bean>
<bean id="viewResolverTiles" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
</bean>
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
pouvez-vous ajouter @Service("employeeService")
OriginalL'auteur Arun | 2015-02-16
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas nécessairement à en donner le nom et la Qualification. Si vous définissez un nom, c'est le nom avec lequel le haricot est inscrit dans le contexte. Si vous ne fournissez pas un nom pour votre service, il sera enregistré comme ni majuscules non qualifié de la classe nom basé sur
BeanNameGenerator
. Donc, dans votre cas, la mise en Œuvre sera enregistrée commeemployeeServiceImpl
. Donc, si vous essayez de autowire avec ce nom, il doit se résoudre directement.@Qualifier
est utilisé dans le cas où si il y a plus d'un bean existe de même type et que vous voulez autowire différents de mise en œuvre de haricots, à des fins diverses.OriginalL'auteur minion
Les gars, j'ai trouvé le problème
J'ai juste essayé en ajoutant le nom de qualificateur de l'employé de service, enfin, il a résolu mon problème.
OriginalL'auteur Arun
Je crois que pour les
@Service
vous devez ajouter le nom du qualificatif comme ci-dessous :@Service("employeeService")
devrait résoudre votre problèmeou après
@Service
vous devez ajouter@Qualifier
annontion comme ci-dessous :Ramesh @Service n'a pas besoin de toujours avoir un nom et une de qualification. Lire ma réponse pour plus de clarté. Je ne veux pas votre réponse à induire en erreur.
vous avez raison, conformément à l'OP, il est nécessaire
Qu'entendez-vous par l'OP?
je veux dire que par @Arun, meta.stackexchange.com/questions/146513/what-does-op-mean
OriginalL'auteur Ramesh Kotha
Si vous avez seulement un bean de type EmployeeService, et l'interface EmployeeService n'ont pas d'autres implémentations, vous pouvez simplement mettre "@Service" avant le EmployeeServiceImpl et "@Autowire" avant la méthode d'initialisation.
Sinon, vous devriez nom à la fève comme @Service("myspecial") et de mettre "@autowire @Qualificatif("myspecial") avant que la méthode d'initialisation.
OriginalL'auteur Mariuszy
Dans votre contrôleur de classe, il suffit d'ajouter @ComponentScan("package") annotation. Dans mon cas, le nom du package est com.shoppingcart.Donc j'ai écrit le code que @ComponentScan("com.shoppingcart") et il a travaillé pour moi.
OriginalL'auteur kaustubh kamat
Vous avez oublié annotation @Service dans votre classe de service.
OriginalL'auteur Resul Rzaeeff
@Service: Il dit à la classe particulière est un Service pour le client. Classe de Service contient principalement de la Logique métier. Si vous avez plusieurs classes de Service d'un paquet de fournir @Qualifier autrement il ne devrait pas nécessiter @Qualifier.
Cas 1:
Case2:
les deux cas sont de travail...
OriginalL'auteur Narayan Yerrabachu
Juste ajouter annotation ci-dessous avec le qualificatif nom du service dans la mise en Œuvre des services de classe:
OriginalL'auteur user7839057
Manque le 'implémente ce mot-clé dans l'impl des classes peut aussi être la question
OriginalL'auteur Laxman Jaygonde