在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配置来解决这个问题。
答案 0 :(得分:0)
我看到@ComponentScan
类上没有@Configuration
注释,因此可能问题在于如何导入此配置。请确保所有特定bean都位于相同的上下文中,或者至少PersistenceConfig
是您自动装配SessionFactory的上下文的父级
答案 1 :(得分:0)
我添加了@ComponentScan注释,但它没有解决问题。注释告诉Spring寻找任何@Components配置为bean。在我看来,这个问题是在使用@Component创建bean的过程中,它找不到在我的Java配置文件中配置的bean,该文件在WebAppInitializer中启动。