質問編集履歴

3 解決策?を追加

msss

msss score 30

2017/02/17 17:03  投稿

コンストラクタに引数が必要なクラスのDIについて
コンストラクタに引数(処理中に値が決定する)が必要なクラスをDIする場合
どのように実装したらよいのでしょうか。
1.基本的にシングルトンなので動的な引数でインスタンス化は出来ないのでしょうか。
2.そのような場合はコンテナ管理させずにnewしてあげるのが一般的なのでしょうか。
```java
@Controller
public class HogeController {
   @Autowired
   private HogeService service;
   void test(){
       int i = 1;
       String s = "test";
// 本当は以下のようなことがしたいのですが、どのようにすれば良いのでしょうか。
       HogeService service = new HogeService(i, s);
       service.print();
   }
}
@Service
public class HogeService {
   final int a;
   final String b;
   HogeService (int a, Sting b){
       this.a = a;
       this.b = b;
   }
   public void print(){
       System.out.println(i);
       System.out.println(s);
   }
}
```  
 
## 追加(解決策?)  
 
- new()した方が良いような気もしますがコンテナに登録されたオブジェクトにコンストラクタに引数が渡せました。  
 
```java  
@Controller  
public class HogeController {  
   void test(){  
       AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Test.class);  
       TestDI hogeA = (TestDI) context.getBean("getHogeInstance", 1, "@@@");  
       TestDI hogeB = (TestDI) context.getBean("getHogeInstance", 2, "◆◆");  
 
       hogeA.print();  
       hogeB.print();  
   }  
}  
 
@Service  
public class Test {  
   @Bean  
   @Scope("prototype")  
   HogeService getHogeInstance(int i, String s) {  
       return new HogeService (i, s);  
   }  
}  
 
public class HogeService {  
   final int a;  
   final String b;  
 
   HogeService (int a, Sting b){  
       this.a = a;  
       this.b = b;  
   }  
 
   public void print(){  
       System.out.println(i);  
       System.out.println(s);  
   }  
}  
 
```
  • Java

    17788 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring

    993 questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Spring Boot

    887 questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • DI (Dependence Injection)

    21 questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

2 print()追加

msss

msss score 30

2017/02/17 13:50  投稿

コンストラクタに引数が必要なクラスのDIについて
コンストラクタに引数(処理中に値が決定する)が必要なクラスをDIする場合
どのように実装したらよいのでしょうか。
1.基本的にシングルトンなので動的な引数でインスタンス化は出来ないのでしょうか。
2.そのような場合はコンテナ管理させずにnewしてあげるのが一般的なのでしょうか。
```java
@Controller
public class HogeController {
   @Autowired
   private HogeService service;
   void test(){
       int i = 1;
       String s = "test";
// 本当は以下のようなことがしたいのですが、どのようにすれば良いのでしょうか。
   HogeService service = new HogeService(i, s);
       HogeService service = new HogeService(i, s);
       service.print();
   }
}
@Service
public class HogeService {
   final int a;  
   final String b;  
 
   HogeService (int a, Sting b){
       this.a = a;  
       this.b = b;  
   }  
 
   public void print(){  
       System.out.println(i);  
       System.out.println(s);  
   }
}
```
  • Java

    17788 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring

    993 questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Spring Boot

    887 questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • DI (Dependence Injection)

    21 questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

1 a

msss

msss score 30

2017/02/17 13:09  投稿

コンストラクタに引数が必要なクラスのDIについて
コンストラクタに引数が必要なクラスをDIする場合
コンストラクタに引数(処理中に値が決定する)が必要なクラスをDIする場合
どのように実装したらよいのでしょうか。
1.基本的にシングルトンなので動的な引数でインスタンス化は出来ないのでしょうか。
2.そのような場合はコンテナ管理させずにnewしてあげるのが一般的なのでしょうか。
```java
@Controller
public class HogeController {
   @Autowired
   private HogeService service;
   void test(){
       int i = 1;
       String s = "test";
// 本当は以下のようなことがしたいのですが、どのようにすれば良いのでしょうか。
   HogeService service = new HogeService(i, s);
   }
}
@Service
public class HogeService {
   HogeService (int a, Sting b){
   }
}
```
  • Java

    17788 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring

    993 questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Spring Boot

    887 questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • DI (Dependence Injection)

    21 questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る