如何实现注解参数的值来源于其他注解相互传值?

darkread 2018-01-06 07:22:26

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryDs1",
transactionManagerRef="transactionManagerDs1",
basePackages={"com.drrr.ds1.dao"})
public class DaoDs1Configuration {
/**
* 注入数据源
*/
@Autowired
@Qualifier("dataSourceDs1")
private DataSource dataSource;

/**
* 配置 EntityManager 实体类
* @param builder
* @return
*/
@Bean(name = "entityManagerDs1")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactory(builder).getObject().createEntityManager();
}

/**
* 配置 EntityManager 工厂实体
* @param builder
* @return
*/
@Bean(name = "entityManagerFactoryDs1")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource)
.packages("com.drrr.ds1.dao.entity") //设置实体类所在位置
.persistenceUnit("persistenceUnitDs1")
.build();
}

/**
* 配置TransactionManager
*/
@Bean(name = "transactionManagerDs1")
public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactory(builder).getObject());
}
}

因为经常性需要些多数据源操作,在SpringBoot中需要写大量的DataSourceConfigure,如上所示完全可以写成基类,DataSource只需要继承即可,唯一修改的就是生成Bean的名称 通用为XXXXXX+数据源名
比如
entityManagerFactoryDs1
transactionManagerDs1
dataSourceDs1
等等
如果可以实现一个注解@DsNameSuffix,那么代码可以变成如下形式,当然我知道下面的形式是有语法错误的,但是就表达这样一个意思吧。

@DsNameSuffix
public class MyDsConfiguration extend DaoConfiguration{
}

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryDs1",
transactionManagerRef="transactionManagerDs1",
basePackages={"com.drrr.ds1.dao"})
public class DaoConfiguration{
/**
* 注入数据源
*/
@Autowired
@Qualifier("dataSource" + DsNameSuffix.value)
private DataSource dataSource;

/**
* 配置 EntityManager 实体类
* @param builder
* @return
*/
@Bean(name = "entityManager" + + DsNameSuffix.value)
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactory(builder).getObject().createEntityManager();
}

/**
* 配置 EntityManager 工厂实体
* @param builder
* @return
*/
@Bean(name = "entityManagerFactory"++ DsNameSuffix.value)
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource)
.packages("com.drrr.ds1.dao.entity") //设置实体类所在位置
.persistenceUnit("persistenceUnitDs1")
.build();
}

/**
* 配置TransactionManager
*/
@Bean(name = "transactionManager"++ DsNameSuffix.value)
public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactory(builder).getObject());
}
}
...全文
480 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧