![](/img/trans.png)
[英]NoSuchBeanDefinitionException: No qualifying bean of type '<package>' available: expected at least 1 bean which qualifies as autowire candidate
[英]No qualifying bean of type available: expected at least 1 bean which qualifies as autowire candidate
我有一個像這樣的Hibernate配置設置
@Configuration
@PropertySource("classpath:db.properties")
@ComponentScan("com.fyt.fyt")
@EnableTransactionManagement
public class ApplicationContextConfig {
@Autowired
private Environment env;
@Bean()
public InternalResourceViewResolver getViewResolver() {
InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
internalResourceViewResolver.setPrefix("/WEB-INF/views/");
internalResourceViewResolver.setSuffix(".jsp");
return internalResourceViewResolver;
}
@Bean()
public DataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("db.driver"));
dataSource.setUrl(env.getProperty("db.url"));
dataSource.setUsername(env.getProperty("db.username"));
dataSource.setPassword(env.getProperty("db.password"));
return dataSource;
}
@Autowired
@Bean()
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
factoryBean.setDataSource(getDataSource());
Properties props = new Properties();
props.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
props.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
factoryBean.setHibernateProperties(props);
factoryBean.setAnnotatedClasses(User.class);
return factoryBean;
}
@Autowired
@Bean()
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(getSessionFactory().getObject());
return transactionManager;
}
@Autowired
@Bean()
public UserDao getUserDao(SessionFactory sessionFactory) {
return new UserDaoImpl(sessionFactory);
}
}
我有這樣的UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Transactional
@Override
public List<User> list() {
return userDao.list();
}
@Transactional
@Override
public User getUser(int id) {
return userDao.getUser(id);
}
@Transactional
@Override
public void saveOrUpdate(User user) {
userDao.saveOrUpdate(user);
}
@Transactional
@Override
public void delete(int id) {
userDao.delete(id);
}
}
和UserDaoImpl.java這樣的
@Repository
public class UserDaoImpl implements UserDao{
@Autowired
private SessionFactory sessionFactory;
public UserDaoImpl() {
}
public UserDaoImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public List<User> list() {
List<User> users = (List<User>)sessionFactory.getCurrentSession().createCriteria(User.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
return users;
}
@Override
public User getUser(int id) {
String hql = "from tbl_user where id="+id;
Query query = sessionFactory.getCurrentSession().createQuery(hql);
List<User> users = (List<User>)query.list();
if(!users.isEmpty() && users != null) {
return users.get(0);
}
return null;
}
@Override
public void saveOrUpdate(User user) {
sessionFactory.getCurrentSession().saveOrUpdate(user);
}
@Override
public void delete(int id) {
User usertodelete = new User();
usertodelete.setId(id);
sessionFactory.getCurrentSession().delete(usertodelete);
}
}
當我運行這個我得到這個異常
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'homeController': Unsatisfied dependency expressed through field 'userDao'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.fyt.fyt.daos.UserDao' 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=userDao)}
我在UserDaoImpl中定義@Repository,在UserServiceImpl中定義@Serice,並且我也在進行組件掃描,例如@ComponentScan(“ com.fyt.fyt”)“ com.fyt.fyt”是根目錄包,但是得到這個錯誤。 我究竟做錯了什么?
getUserDao()
必須為userDao()
。 @Qualifier(value=getUserDao)
UserDao
) 用@Bean
注釋的方法的名稱將成為Bean的名稱。 因此,當您嘗試在HomeController中自動將名稱為“ userDao”的bean連線時,該bean的名稱為“ getUserDao”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.