我不断收到此错误,无法弄清楚原因。是的,我知道很多人都有类似的问题,但是阅读他们得到的答案并不能解决我的问题。
org.springframework.beans.factory.BeanCreationException:创建名称为“ contactController”的bean时出错:自动连接依赖项的注入失败;嵌套的异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有net.service.ContactService net.controller.ContactController.contactService; 嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[net.service.ContactService]的匹配bean:期望至少有1个bean可以作为此依赖项的自动装配候选。依赖项注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
这是控制器:
@Controller @SessionAttributes public class ContactController { @Autowired private ContactService contactService; //methods... }
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(); } }
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(); } }
和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>
在springservlet .xml中:
<context:component-scan base-package="net.controller" />
(我假设服务impl与服务接口“ net.service”位于同一程序包中)
我认为您必须将包net.service(或全部net)添加到组件扫描中。当前,spring仅在net.controller中搜索组件,并且由于您的服务隐含在net.service中,因此Spring不会实例化它。