在Spring的实际应用中,我发现TransactionManager的配置是通过嵌套类实现的:
@Configuration
@ComponentScan
public class JpaConfig {
//EntityManagerFactory, JpaVendorAdapter, DataSource @Beans
@Configuration
@EnableTransactionManagement
public static class TransactionConfig implements TransactionManagementConfigurer {
@Inject
private EntityManagerFactory emf;
public PlatformTransactionManager annotationDrivenTransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
}
}
这是一种好习惯还是什么?与标准的@Bean方法相比有什么不同:
@Configuration
@EnableTransactionManagement
public class DbConfig {
//EntityManagerFactory, JpaVendorAdapter, DataSource @Beans
@Bean
public JpaTransactionManager createTransactionManager(EntityManagerFactory emf) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(emf);
return jpaTransactionManager;
}
}
或者仅仅是分离责任?
答案 0 :(得分:0)
这是一种好习惯还是什么?与标准@Bean
相比有什么不同
这两种方法都有效,你可能已经注意到了。
第一种方法类似于inner bean概念。
如果您知道除了外部bean之外的任何其他bean都不会使用该bean,那么您可以将其声明为内部bean。这里的优点是通过将bean作为内部bean来确保它不会暴露给除外部bean之外的其他bean,因此无法在其他bean中使用/注入内部bean。
从上述链接中引用
内部bean定义不需要定义的id或名称;如果指定,则容器不使用此类值作为标识符。容器还会在创建时忽略范围标志:内部bean始终是匿名的,并且始终使用外部bean创建它们。无法将内部bean注入协作bean而不是封闭bean中,或者独立访问它们。