[英]No qualifying bean of type available: expected at least 1 bean which qualifies as autowire candidate
I have a Hibernate configurations setup like this 我有一个像这样的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);
}
}
And I have UserServiceImpl.java like this 我有这样的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);
}
}
And UserDaoImpl.java like this 和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);
}
}
When I run this I am getting this exception 当我运行这个我得到这个异常
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)}
I am defining @Repository in UserDaoImpl and @Serice in UserServiceImpl and I am also doing the component scan like this @ComponentScan("com.fyt.fyt") "com.fyt.fyt" is the root level package but still, I am getting this error. 我在UserDaoImpl中定义@Repository,在UserServiceImpl中定义@Serice,并且我也在进行组件扫描,例如@ComponentScan(“ com.fyt.fyt”)“ com.fyt.fyt”是根目录包,但是得到这个错误。 What am I doing wrong?
我究竟做错了什么?
getUserDao()
must be userDao()
. getUserDao()
必须为userDao()
。 @Qualifier(value=getUserDao)
@Qualifier(value=getUserDao)
UserDao
in your app) UserDao
) The name of the method annotated with @Bean
becomes name of the bean. 用
@Bean
注释的方法的名称将成为Bean的名称。 So currently the bean name is "getUserDao", while you are trying to autowire a bean with name "userDao" in you HomeController 因此,当您尝试在HomeController中自动将名称为“ userDao”的bean连线时,该bean的名称为“ getUserDao”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.