Java Spring无法自动连接字段,没有类型匹配的bean

Java Spring无法自动连接字段,没有类型匹配的bean,java,hibernate,spring,javabeans,autowired,Java,Hibernate,Spring,Javabeans,Autowired,我尝试使用Spring3.1.0.RELEASE+Hibernate来实现RESTfulWeb服务,以遵循这家伙的项目 当我运行我的项目时,包含这样的错误 SEVERE: Context initialization failed *.BeanCreationException: Error creating bean with name 'userServiceController': Injection of autowired dependencies failed; *.BeanCrea

我尝试使用Spring3.1.0.RELEASE+Hibernate来实现RESTfulWeb服务,以遵循这家伙的项目

当我运行我的项目时,包含这样的错误

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)

应用程序配置:

@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() { ...
网络配置:

@Configuration
@EnableWebMvc
public class WebConfig { ... }
因此,从这里开始在autowired中获取错误:

用户服务控制器:

@Controller
public class UserServiceController {

    @Autowired
    private UserService userService;
由DefaultUserService实现的UserService:

@Service
@Transactional(propagation = Propagation.REQUIRED)
public class DefaultUserService implements UserService {

    @Autowired
    private UserDAO userDao;
用户道:

public interface UserDAO extends GenericDAO<User> {  ... }
公共接口UserDAO扩展了GenericDAO{…}
UserHibernateDAO:

@Profile("hibernate")
public class UserHibernateDAO extends GenericHibernateDAO<User> implements UserDAO{ ... }
@Profile("hibernate")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class GenericHibernateDAO<T extends Serializable> extends AbstractHibernateDAO<T> implements GenericDAO<T> { ... }
@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();
    }
}
@Profile(“休眠”)
公共类UserHibernateDAO扩展了GenerichBernateDAO实现UserDAO{…}
GenericHibernateDAO:

@Profile("hibernate")
public class UserHibernateDAO extends GenericHibernateDAO<User> implements UserDAO{ ... }
@Profile("hibernate")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class GenericHibernateDAO<T extends Serializable> extends AbstractHibernateDAO<T> implements GenericDAO<T> { ... }
@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();
    }
}
@Profile(“休眠”)
@范围(BeanDefinition.Scope\u原型)
公共类genericBernateDao扩展了AbstractHibernateDAO实现GenericDAO{…}
最后一个是HibernateDao:

@Profile("hibernate")
public class UserHibernateDAO extends GenericHibernateDAO<User> implements UserDAO{ ... }
@Profile("hibernate")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class GenericHibernateDAO<T extends Serializable> extends AbstractHibernateDAO<T> implements GenericDAO<T> { ... }
@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();
    }
}
@Transactional(传播=propagation.SUPPORTS)
公共抽象类AbstractHibernateDAO实现DAO{
私人课堂;
@自动连线
私人会话工厂会话工厂;
公开摘要HibernateDao(){
超级();
}
公共最终无效课堂(最终课堂){
this.clazz=clazz;
}
@凌驾
@事务(只读=真)
公共T findById(字符串id){
返回(T)this.getCurrentSession().get(this.clazz,id);
}
受保护的会话getCurrentSession(){
返回此.sessionFactory.getCurrentSession();
}
}
我以为它能找到用户HibernateDao。可能是我遗漏了什么。所以,希望有人知道如何修复它。我花了两天时间研究这个问题

我想SessionFactory也可能有问题。因为我开始修理那个东西,这就发生了


提前谢谢。

除了
@Profile(“hibernate”)
之外,
用户hibernateDao
需要一个注释,声明它是一个类似Springbean的
@命名的
@组件

您有没有一个XML文件来拼写包?我使用的是:@ComponentScan(basePackages=“com.cloudlb”,excludeFilters={@ComponentScan.Filter(Configuration.class)}),这是相同的,你能给我一个例子吗?那么,我只是把@Component放对了?是的。只需将其放在配置文件注释的上方或下方。当添加“@Component”并删除“@Profile”时,它可以看到所有内容。在放置“@Profile(“hibernate”)之后,问题来了。你能给我一个如何使用'@Bean'设置活动配置文件的例子吗