Весенний порядок бобов по классам - PullRequest
0 голосов
/ 29 марта 2020

У меня есть два класса, и один из классов должен выполняться первым во время выполнения среди двух, но это происходит наоборот.

Первый класс:

@Configuration
public class A(){
@Bean
public void methodA(){}

@Bean
public void methodB(){
        for(i=0;i<9;i++){
            B b = new B();
            b.setJdbcUrl();
            b.setUsername();
            b.setPassword();
        }
    }
}

Второй класс:

@Configuration
public class B() extends HikariConfig {
@Bean
public HikariDataSource mysqlDataSource(){}

@Bean(name = "someEntityManager")
public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {}

@Bean(name = "someTransactionManager")
public PlatformTransactionManager mysqlTransactionManager(@Qualifier("someEntityManager") EntityManagerFactory entityManagerFactory) {}

В настоящее время порядок, следующий за Spring, имеет следующий вид:
1) b.mysqlDataSource ()
2) b.LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory (EntityManagerFactoryBuilder builder) 1011 b1ilder) 101 * .PlatformTransactionManager mysqlTransactionManager (@Qualifier ("someEntityManager") EntityManagerFactory entityManagerFactory)
4) a.methodA ()
5) a.methodB ()

После моего заказа должен следовать Spring as:
1) a.methodA ()
2) a.methodB ()
3) b.mysqlDataSource ()
4) b.LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory (EntityManagerFactderBuild) ) b.PlatformTransactionManager mysqlTransactionManager (@Qualifier ("someEntityManager") EntityManagerFactory entityManagerFactory)

И это должно Также go через код, где класс B является единственным, который зависит от всех настроек URL, имени пользователя и пароля класса A, поэтому сначала необходимо запустить A.

1 Ответ

0 голосов
/ 29 марта 2020

Вы можете использовать @DependsOn:

@Configuration
public class A {

    @Bean
    public void methodA() {
    }

    @DependsOn("methodA")    
    @Bean
    public void methodB() {
        for (i = 0; i < 9; i++) {
            B b = new B();
            b.setJdbcUrl();
            b.setUsername();
            b.setPassword();
        }
    }
}

@Configuration
@DependsOn({"methodA", "methodB"})
public class B extends HikariConfig {

    @DependsOn("mysqlEntityManagerFactory")
    @Bean
    public HikariDataSource mysqlDataSource() {
    }

    @DependsOn("mysqlTransactionManager")
    @Bean(name = "someEntityManager")
    public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
    }

    @Bean(name = "someTransactionManager")
    public PlatformTransactionManager mysqlTransactionManager(@Qualifier("someEntityManager") EntityManagerFactory entityManagerFactory) {
    }

}
...