2017-01-12 27 views
0

に私は@Resource -annotatedフィールドを持つBeanがあります。@Resource注射は溶接SE

@ApplicationScoped 
open class UtilProducer {  
    ...  

    @Resource(lookup = "java:jboss/datasources/mj2") 
    private lateinit var dataSource: DataSource 

    ...  

をそして私は溶接がこのdataSourceフィールドに何かを注入したいです。

私はResourceInjectionServicesの私の独自の実装を追加しようとしました - MyResourceInjectionServicesが、それは私が@Resource -annotatedフィールドを注入する溶接SEを設定する必要がありますどのように私のクラス

val weld = Weld() 
     .disableDiscovery() 
     .addPackages(true, UtilProducer::class.java) 
     .addPackages(true, CDIViewProvider::class.java) 
     .addBeanClass(MyResourceInjectionServices::class.java) 

をインスタンス化するとしても試みるように思われたしません。 ?

答えて

0

最後に、このような場合にWeldオブジェクトをサブクラス化する必要があることをドキュメントで確認しました。ルックスでKotlinに私の場合は

public class MyWeld extends Weld { 
    protected Deployment createDeployment(ResourceLoader resourceLoader, CDI11Bootstrap bootstrap) { 
     return super.createDeployment(new MyResourceLoader(), bootstrap); 
    } 
} 

::とcreateDeploymentメソッドをオーバーライド

val weld = object : Weld() { 
    override fun createDeployment(resourceLoader: ResourceLoader?, bootstrap: CDI11Bootstrap?): Deployment { 
     val deployment = super.createDeployment(resourceLoader, bootstrap) 
     deployment.services.add(ResourceInjectionServices::class.java, MyResourceInjectionServices()) 
     return deployment 
    } 
}.apply { 
    disableDiscovery() 
    addPackages(true, UtilProducer::class.java) 
    addPackages(true, CDIViewProvider::class.java) 
}