-1

いくつかのことを行い、春のデータを使用するライブラリを作成します。Springデータを使用するJavaライブラリ

このライブラリを使用するプロジェクトでは、このjarをインポートしてこのライブラリを使用できます:MyLib.doSomeStuff()。

このようにSpringを使用することができます。また、doSomeStuff()メソッド内でApplicationContextを初期化することで、DIと@ConfigurationクラスをDataSourcesにロードすることができます。

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); 
} 
+0

あなたはあなたのライブラリーでは、このような春のアプリコンテキストを開始するべきではありません。図書館を建てる場合は図書館にしてください。ユーザーがBeanの作成方法を決定できるようにします。libユーザーがSpringを簡単に構成できるように、xmlまたはJavaベースの構成を提供することができます。 –

答えて

0

ルートの設定クラスを持っている場合、それは

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 
    } 

} 
関連する問題