12823


Java8 (JavaEE7) を使って開発しています。  
JavaEEのCDIを使って、「依存していないjarに存在する具象クラスのインスタンス」を注入したいです。  
つまり：

＜business.jar＞

[code]

    class BiusinessController {
        @Inject
        private Repository repository;
    }
    
    interface Repository { }
    
[/code]

＜dataaccess.jar＞

[code]

    class RepositoryImpl implements Repository
    
[/code]

このように、business.jarとdataaccess.jarの依存の方向はdataaccess→businessです。  
よって、このままではRepositoryImplが見つけられないため、注入できません。  
諸事情から、この依存の方向は変えられないです。

このように、依存対象ではないjar（dataaccess.jar）に存在する具象クラス（`RepositoryImpl`）を注入するには、どうしたらいいのでしょうか？


CC BY-SA 3.0
2015-07-28T01:22:06.793
12755
2015-07-30T04:53:49.013
8078
question
java
依存していないjarに存在する具象クラスインスタンスをDIしたい


同じクラスローダでロードされているのであれば依存方向に関係なく注入できるのではないでしょうか？

### Repository.java

[code]

    public interface Repository
    {
        String say();
    }
    
[/code]

### RepositoryImpl.java

[code]

    @ApplicationScoped
    public class RepositoryImpl implements Repository
    {
        public String say()
        {
            return "Hello !!";
        }
    }
    
[/code]

### BusinessController.java

[code]

    @ApplicationScoped
    public class BusinessController 
    {    
        @Inject
        private Repository repository;
    
        public String greeting()
        {
            return repository.say();
        }
    }
    
[/code]

これらを下記の構成にしたアプリとしてデプロイした場合にgreetingメソッドは希望通り、「Hello !!」を返してくれます。

[code]

    ROOT
     + WEB-INF
         + lib
             + business.jar
             + dataaccess.jar
         + web.xml
    
[/code]


CC BY-SA 3.0
2015-07-30T04:53:49.013
12823
2015-07-30T04:53:49.013
10724
12755
answer