SessionFactory XML配置有效,但不适用于Java配置。为什么?

时间:2014-01-22 19:56:27

标签: spring-java-config

在Spring XML配置中,我有以下内容:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
   ....
</bean>

在Java类中,我有         @Autowired     private SessionFactory sessionFactory; 没有二传手。这样可行。 现在,我将sessionFactory更改为Java配置,如下所示。

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:jdbc.properties" })
public class PersistenceConfig {

    @Bean
    public SessionFactory sessionFactory() {
    LocalSessionFactoryBuilder lsfb = new LocalSessionFactoryBuilder(dataSource());
    lsfb.addAnnotatedClasses(...);
            lsfb.setProperties(hibernateProperties());
            return lsfb.buildSessionFactory();
    }
  // ...
}

我收到错误“无法自动装配字段”。添加setter没有用。为什么sessionFactory无法通过Java配置自动装配?

顺便说一句,我也可以通过为DAO配置Java配置来解决这个问题。

2 个答案:

答案 0 :(得分:0)

我看到@ComponentScan类上没有@Configuration注释,因此可能问题在于如何导入此配置。请确保所有特定bean都位于相同的上下文中,或者至少PersistenceConfig是您自动装配SessionFactory的上下文的父级

答案 1 :(得分:0)

我添加了@ComponentScan注释,但它没有解决问题。注释告诉Spring寻找任何@Components配置为bean。在我看来,这个问题是在使用@Component创建bean的过程中,它找不到在我的Java配置文件中配置的bean,该文件在WebAppInitializer中启动。