我在春季相对较新,我在理解spring的基本原理方面有问题。
我的控制器
@Controller
public class HomeController {
private ContactManager contactManager;
@Autowired
public void setContactManager(ContactManager contactManager) {
this.contactManager = contactManager;
}
@RequestMapping(value="/")
public ModelAndView listContact(ModelAndView model) throws IOException {
List<Contact> listContact = contactManager.list();
model.addObject("listContact", listContact);
model.setViewName("home");
return model;
}
...联系ManagerImpl及接口方法的实现
public class ContactManagerImpl implements ContactManager {
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
...ContactManager
public interface ContactManager {
public void saveOrUpdate(Contact contact);
public void delete(int contactId);
public Contact get(int contactId);
public List<Contact> list();
}和root-context.xml
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="sec"/>
</bean>
<bean id="managmentService" class="spring.contact.impl.model.ContactManagerImpl">
<property name="dataSource" ref="dataSource"/>
</bean>我的问题是我犯了错误:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of
type [spring.contact.api.ContactManager] found for dependency: expected at least 1
bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}当然,问题在于@Autowired注解。我怎么才能修好它?当我删除@Autowired注释时,我得到了另一个错误: NullPointerException (HomeController中的管理器)。
发布于 2014-09-06 19:16:25
你的财务总监应该是..。
@Controller
public class HomeController {
@Autowired
@Qualifier("managmentService")
private ContactManager contactManager;
@RequestMapping(value="/")
public ModelAndView listContact(ModelAndView model) throws IOException {
List<Contact> listContact = contactManager.list();
model.addObject("listContact", listContact);
model.setViewName("home");
return model;
}
...在您的配置中,还要添加<context:annotation-config />,以便能够使用@Autowired注释。
<context:annotation-config />的一个例子
<?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"
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.xsd">
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>发布于 2014-09-06 18:12:24
将@Autowired注释移动到ContactManager的声明中。
你不需要策划人,把它删掉。
https://stackoverflow.com/questions/25703257
复制相似问题