Je continue à avoir cette erreur, et je ne peux pas comprendre pourquoi .. oui je sais que beaucoup de gens ont eu des problèmes similaires, mais lire les réponses qu’ils ont obtenues ne résout pas mon problème.
org.springframework.beans.factory.BeanCreationException: erreur lors de la création d'un bean avec le nom 'contactController': l'injection des dépendances autowired a échoué; L'exception imbriquée est org.springframework.beans.factory.BeanCreationException: impossible pour le champ autowire: private net.service.ContactService net.controller.ContactController.contactService; L'exception imbriquée est org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean correspondant du type [net.service.ContactService] trouvé pour la dépendance: attendu au moins 1 bean pouvant être considéré comme candidat autowire pour cette dépendance. Annotations de dépendance: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}
voici le contrôleur:
@Controller
@SessionAttributes
public class ContactController {
@Autowired
private ContactService contactService;
//methods...
}
the ContactServiceImpl
@Service("contactService")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class ContactServiceImpl implements ContactService {
@Autowired
private ContactDao contactDao;
public ContactServiceImpl() {
}
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void addContact(Contact contact) {
contactDao.saveContact(contact);
}
@Override
public List<Contact> getContacts() {
return contactDao.getAllContacts();
}
}
the ContactDaoImpl
@Repository("contactDao")
public class ContactDaoImpl implements ContactDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public void saveContact(Contact contact) {
sessionFactory.getCurrentSession().saveOrUpdate(contact);
}
@Override
@SuppressWarnings("unchecked")
public List<Contact> getAllContacts() {
return (List<Contact>) sessionFactory.getCurrentSession().createQuery("from contact c").list();
}
}
et le spring-servlet.xml
<?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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:property-placeholder location="classpath:jdbc.properties" />
<context:component-scan base-package="net.controller" />
<tx:annotation-driven transaction-manager="hibernateTransactionManager" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.user}" />
<property name="password" value="${database.password}" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>net.form.Contact</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
</props>
</property>
</bean>
<bean id="hibernateTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
Au printemps, servlet .xml:
<context:component-scan base-package="net.controller" />
(J'ai supposé que le service impl est dans le même package que l'interface de service "net.service")
Je pense que vous devez ajouter le package net.service (ou la totalité de net) à l'analyse des composants. Actuellement, spring ne recherche que des composants dans net.controller et, dans la mesure où votre implément service est dans net.service, il ne sera pas instancié au printemps.
Il y a bien un problème avec la création du bean ContactServiceImpl
. Tout d'abord, assurez-vous que la classe est réellement instanciée en déboguant le constructeur no-args lorsque le contexte Spring est initié et lorsqu'une instance de ContactController
est créée.
Si la variable ContactServiceImpl
est réellement instanciée par le contexte Spring, mais qu'elle ne correspond tout simplement pas à votre annotation @Autowire
, essayez d'être plus explicite dans votre injection d'annotation. Voici un gars qui a un problème similaire au vôtre et qui donne quelques solutions possibles:
http://blogs.sourceallies.com/2011/08/spring-injection-with-resource-and-autowired/
Si vous me demandez, je pense que ça ira si vous remplacez
@Autowired
private ContactService contactService;
avec:
@Resource
@Qualifier("contactService")
private ContactService contactService;
J'avais cette même erreur et la chercher m'a amené ici. Mon correctif semblait être simplement d'ajouter l'annotation @Component à l'implémentation du service abstrait.
Dans ce cas, cela ressemblerait à:
import org.springframework.stereotype.Component;
...
@Component
public class ContactServiceImpl implements ContactService {
Lorsque vous obtenez cette erreur, il manque une annotation . Il me manquait l'annotation @service on service Lorsque j'ai ajouté cette annotation, cela a bien fonctionné pour moi.
J'ai fait face au même problème aujourd'hui. En fait, j’ai oublié de mentionner les annotations @ Service/@ Component pour mon fichier d’implémentation de service, pour lequel spring n’est pas capable d’autowire et n’a pas pu créer le bean.
J'ai eu exactement le même problème, essayez de mettre les deux classes dans le même paquet et ajoutez une ligne dans le fichier pom.xml
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-web </artifactId>
<version> 1.2.0.RELEASE </version>
</dependency>
Dans la configuration Java, assurez-vous d’avoir importé votre configuration dans RootConfig comme ceci @Import (PersistenceJPAConfig.class)