Spring BootのDIで生成されるインスタンスについて教えていただきたいです。
例えば、Spring Bootのプロジェクトで@RestController、@Service、@Repositoryといった各アノテーションを複数用意したときです。
プロジェクト内に@RestControllerを利用したコントローラークラスが1つあったとして、
複数のサービスクラス(ServiceA、ServiceB、ServiceC・・・)がAutowiredされる場合、私の理解では、プロジェクトを実行したときに3つのサービスクラスのインスタンスが生成されるかと思います。
@RestController public class TestController { @Autowired ServiceA serviceA; @Autowired ServiceB serviceB; @Autowired ServiceC serviceC; @RequestMapping(value = "/main", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.POST) public void main(@RequestBody JsonNode json) { //振り分け処理 } }
このときに実行したいサービスクラスはServiceAの1つだけすると、ServiceB、ServiceCのインスタンスは余計でメモリを圧迫すると思います。
かといって、@Autowiredなどのアノテーションを利用せずに実装しようとすると、振り分け処理を行うことになりますが、ソースコードの中でnew ServiceAなどを行うとなると、Spring Bootの根幹であるDIから離れることになってしまうと思います。
・DIのメリットデメリット
・DIでインスタンスが生成されるタイミング
・ @Autowiredなどを利用したときに無駄なインスタンスを生成しない方法
などこのあたりについてご教授頂きたいです。
2018/10/30追記
3つのサービスクラスですが、飛ばされてくるJsonの値によって使用するサービスクラスを動的に切り替えるという想定をしています。
int num = 1;←Jsonの値 if (num == 1) { //ServiceAを利用 } else if (num == 2) { //ServiceBを利用 } else { //ServiceCを利用 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/30 01:26
2018/10/30 01:44