使用spring数据的java库

4ngedf3f  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(397)

我´我要写一个库,做一些东西,使用spring数据。
这个想法是使用这个库的项目可以导入这个jar并使用这个库:mylib.dosomestuff()。
以这种方式使用spring是可能的,我如何在dosomestuff()方法中初始化applicationcontext,以便加载di和带有数据源的@configuration类?

public class MyLib {

@Autowired
private static SomeJpaRepository someJpaRepository;

  public static void doSomeStuff(){
    ...init ApplicationContext....
    ...setup DataSources...
    List<SomeEntity> someEntityList = someJpaRepository.someMethod();
  }

// or
  public static List<SomeEntity> getSomeEntityList() {
    return someJpaRepository.finAll();
  }
}

//other package
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "gxEntityManager", transactionManagerRef = "gxTransactionManager",
        basePackages = "com.gx")
public class GxConfig {

  @Primary
  @Bean(name = "gxDataSource")
  public DataSource gxDataSource() {
    DataSourceBuilder dataSourceBuilderGx = null;
    //..
    return dataSourceBuilderGx.build();
  }

  @Primary
  @Bean(name = "gxEntityManager")
  public LocalContainerEntityManagerFactoryBean gxEntityManagerFactory(EntityManagerFactoryBuilder builder) {
    return builder.dataSource(gxDataSource()).packages("com.gx").build();
 }

  @Primary
  @Bean(name = "gxTransactionManager")
  public PlatformTransactionManager gxTransactionManager(
        @Qualifier("gxEntityManager") EntityManagerFactory entityManagerFactory) {
    return new JpaTransactionManager(entityManagerFactory);
  }
}

//other package
public interface SomeEntity extends JpaRepository<SomeEntity, Long>
{
    SomeEntity findById(Long id);
}
rdlzhqv9

rdlzhqv91#

如果您有一个根配置类,它可以简单到

ApplicationContext context = 
    new AnnotationConfigApplicationContext(GxConfig.class);

别每次打电话都这么做 doStuff() 因为创建应用程序上下文是昂贵的。如果要将库用作黑匣子,我想可以使用这个独立的应用程序上下文。
你可以这样做:

public class MyLib {

  private ApplicationContext context;

  public MyLib() {
    context = new AnnotationConfigApplicationContext(GxConfig.class);
  }

  public void doStuff() {
    SomeBean bean = context.getBean(SomeBean.class);
    // do something with the bean
  }

}

相关问题