2017-02-18 8 views
0

現在、インターフェイスDIは使用できません。ここをクリックしてください:http://www.springbyexample.org/examples/core-concepts-dependency-injection-to-the-rescue.htmlSpring Boot、インタフェースではDIが可能ですが、Springでは可能ではありませんか?

私はちょうど春のブートで作業を始めました。私はインターフェイスを使用してDIを使用した簡単なWebアプリケーションを作成しました。私はウェブ上の理由を見つけることができません。なぜSpringが持っていないのにSpring Bootがこの機能を持っているのですか?

概念を理解してください。

ありがとうございました。

編集

ダオImple。

@Repository 
public class AbcDaoImpl implements AbcDaoInt{ 
    @Autowired 
    JdbcTemplate jdbc; 

    @Override 
    public int selectABC(String user, String password){ 
     // some db query 
    } 

ダオインタフェース

@Component 
public interface AbcDaoInt{ 
    int selectABC(String user, String password);  
} 

サービス

@Service 
public class adapter { 
    @Autowired 
    AbcDaoInt abcDao; 

    public Map<String, Object> abc(String user, String password) { 

    try{ 
      int abcId = abcDao.selectABC(user, pwd); 
     } 
    } 
+0

あなたがリンクしたページは時代遅れであり、部分的にしか正しいものではなく、「インターフェイス注入」が意味することはまったく定義しません。あなたはそれを言っているわけでもありません。 Springブートは依存性注入のためにSpringを使用しているので、問題は解決しません。 –

+0

@RishiPandeyあなたに私たちにいくつかのコードを見せてもらえますか?いくつかの具体的な実装が必要なので、インターフェイス注入を行うことはできません。おそらくあなたは混乱しています@インターフェースはインターフェイスがいくつかのインターフェイスですが、春はそれの具体的な実装をautowire – pezetem

+0

@ JBNizet私は春は現在setterとコンストラクタの依存関係注入をリンクしていることを指摘したい。そして私は、SpringブートがDIのためにSpringを使用することを知っています。私は概念を理解していないかもしれませんが、私の質問は有効です。 – RishiPandey

答えて

1

DIについては、春と春ブートの間に違いはありません。 フィールドにインタフェースを使用し、そのフィールドに実装を挿入することは可能です。

私はリンク先のページが

インタフェースインジェクションによって何を意味するのか理解していないが - これは、現在

私たちの時代遅れ間違っbに思わ春には実装されていません。

+0

@Stefen返信ありがとうございます。だから、あなたはSpringでインターフェース注入が可能だと言っていますか? – RishiPandey

+0

@RishiPandey再び、「インターフェース注入」の定義があるまで、私たちはその質問に答えられません。あなたは1つ持っていますか? –

+0

SpringのmvcでdaoインタフェースをBeanとして定義することはできません。Springにはimplが必要です。クラス。しかし、私のコード(春のブート)私は編集セクションでアップロード:私は、interfaceDao(abdDao)オブジェクトを使用しています。 Spring MVCで同じことをしようとすると、実行時にSpringに実装クラスが必要なエラーが発生します.... – RishiPandey

1

インターフェイスを注入することで正確に何をしようとしていますか?インタフェースはJavaクラスによって実装されるはずなので、インタフェースを実装するいくつかのクラスがインジェクションされるべきであることを意味するインタフェースをインジェクトするときはいつでもそうです。

これはどのように行うべきか、これらのクラスが存在するパッケージでコンポーネントスキャンを有効にしてから、アノテーションを使用するためにアノテーションを有効にする必要があります。

<context:component-scan base-package="" /> 
<mvc:annotation-driven> 


public interface singleInterface{ 
    void someMethod(); 
} 

@Component(value="b") 
class B implements singleInterface{ 
    public void someMethod(){ 
    System.out.println(“from b class”); 
    } 
} 

@Component(value=“a”) 
class A implements singleInterface{ 
    public void someMethod(){ 
    System.out.println(“from A class”); 
    } 
} 

//injecting 

@Autowire 
@Qualifier("b") 
singleInterface bInterface; 

bInterface.someMethod();//print from b class. 

@Autowire 
@Qualifier("a") 
singleInterface aInterface; 

aInterface.someMethod();//print from a class. 

これは、あなたが春ブーツでcomponent scanを有効にするために持っていけない上とspring mvc上で動作します。

+0

私のコードも同様に動作しています。私の質問は、Spring BootがインターフェースDIを許可する理由でした。 docsはSpringがインターフェイスDIを許可しないと言います。 – RishiPandey

+0

上記の投稿は春にコーディングされていますが、なぜあなたはそれが許可されていないと言いますか? – Priyamal

+0

これはまさに私が知りたいことです。 Spring mvcでdaoインタフェースをBeanとして定義することはできません。Springにはimplが必要です。クラス。しかし私の質問の編集セクションに投稿したコードは、Springブートを使用しています。ここではxml configを指定する必要はありません。豆 – RishiPandey

関連する問題