Я пытаюсь реализовать использование Spring 3.1.0.RELEASE + Hibernate, чтобы веб-сервис RESTful следовал проекту этого парня https://github.com/eugenp/REST
когда я запускаю мой проект, в нем содержится ошибка, подобная этой.
SEVERE: Context initialization failed
*.BeanCreationException: Error creating bean with name 'userServiceController': Injection of autowired dependencies failed;
*.BeanCreationException: Error creating bean with name 'defaultUserService': Injection of autowired dependencies failed;
*.BeanCreationException: Could not autowire field: private com.cloudlb.dao.UserDAO com.cloudlb.service.DefaultUserService.userDao;
*.NoSuchBeanDefinitionException: No matching bean of type [com.cloudlb.dao.UserDAO]
Это моя конфигурация: (persistence.properties)
ApplicationConfig:
@Configuration
@ComponentScan(basePackages = "com.cloudlb", excludeFilters = { @ComponentScan.Filter(Configuration.class)})
public class ApplicationConfig {
@Bean
public static PropertyPlaceholderConfigurer properties() {
final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
final Resource[] resources = new ClassPathResource[]{new ClassPathResource("persistence.properties"), new ClassPathResource("restful.properties")};
ppc.setLocations(resources);
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}
В PersistenceHibernateConfig содержится так:
@Profile("hibernate")
@EnableTransactionManagement
public class PersistenceHibernateConfig { ...
@Bean
public LocalSessionFactoryBean alertsSessionFactoryBean() { ...
@Bean
public DataSource restDataSource() { ...
@Bean
public HibernateTransactionManager transactionManager() { ...
WebConfig:
@Configuration
@EnableWebMvc
public class WebConfig { ... }
Итак, он начинает получать ошибку в автопроводке отсюда:
UserServiceController:
@Controller
public class UserServiceController {
@Autowired
private UserService userService;
UserService, который реализован в DefaultUserService:
@Service
@Transactional(propagation = Propagation.REQUIRED)
public class DefaultUserService implements UserService {
@Autowired
private UserDAO userDao;
UserDAO:
public interface UserDAO extends GenericDAO<User> { ... }
UserHibernateDAO:
@Profile("hibernate")
public class UserHibernateDAO extends GenericHibernateDAO<User> implements UserDAO{ ... }
GenericHibernateDAO:
@Profile("hibernate")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class GenericHibernateDAO<T extends Serializable> extends AbstractHibernateDAO<T> implements GenericDAO<T> { ... }
И последнее. AbstractHibernateDAO:
@Transactional( propagation = Propagation.SUPPORTS )
public abstract class AbstractHibernateDAO<T extends Serializable> implements DAO<T> {
private Class<T> clazz;
@Autowired
private SessionFactory sessionFactory;
public AbstractHibernateDAO() {
super();
}
public final void setClazz(final Class<T> clazz) {
this.clazz = clazz;
}
@Override
@Transactional( readOnly = true )
public T findById(String id) {
return (T) this.getCurrentSession().get(this.clazz, id);
}
protected Session getCurrentSession() {
return this.sessionFactory.getCurrentSession();
}
}
Я думал, что он может найти UserHibernateDAO. Может быть, я что-то здесь упускаю. Так что, надеюсь, кто-то знает, как это исправить. Я ударил эту проблему в течение 2 дней.
Полагаю, в SessionFactory тоже может быть проблема. Потому что я начал исправлять эту вещь, и это пришло.
Заранее спасибо.