2

CDI のみを使用する単純な Java プログラムでの依存性注入には常に beans.xml が必要ですか? また、オブジェクトを注入するために Bean を構築する必要がありますか?

以下は、依存性注入を伴う単純な Java プロジェクトのコードです::

インターフェース

 public interface Hello
 {
      public void sayHello(String str);
 }

クラス

 public class HelloImpl1 implements Hello{
               public void sayHello(String str){
 System.out.println("Hello from 1st block")
               }
 }

クラス

          public class HelloImpl2 implements hello{
                public void sayHello(String str){
                    System.out.println("Hello from 2nd block")
                            }
                   }

クラス

      public CallingHello(){
          @Inject
          Hello hello;

         public void callHello(){
            hello.sayHello("Hey");
            }
       }

クラス

      public Test(){

    public static void main(String[] args){
       CallingHello hello=new CallingHello();
       hello.callHello();
         }

私がやっていることはそれだけで、テストクラスの実行中にnullpointerexceptionがスローされ、Eclipseで単純なクラスをビーンにしないようにしています.miはうまくいきますか??

4

3 に答える 3

2

アプリケーション コンテキストの一部ではないオブジェクトに依存関係を注入する (場合によってはポスト プロセッサを適用する) ために、 autowiring を使用できます。

ファクトリ メソッドで Java 構成クラスを使用して構成できますApplicationContext

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean(name="HelloImpl1")
    public HelloImpl1 helloImpl1() {
        return new HelloImpl1();
    }

    @Bean(name="HelloImpl2")
    public HelloImpl1 helloImpl2() {
        return new HelloImpl2();
    }
}

次に、インスタンス化します。

ApplicationContext ctx = 
    new AnnotationConfigApplicationContext(AppConfig.class);
HelloImpl1 helloImpl1= (HelloImpl1)ctx.getBean("HelloImpl1");
helloImpl1.sayHello("#?*")
于 2013-10-16T12:54:14.630 に答える