Spring Boot 7 DI処理
DI処理
ソースコードにクラス名を直接記述せずにインスタンス化を行うプログラミング方法
「Spring DIコンテナ」参照
@Service
※MyService.java
@Service
public class MyService {
public String getTest(){
return "TEST";
}
}
※MyRestContoller.java
@RestController
public class MyRestContoller {
@Autowired
private MyService service;
MyServiceを探して自動インスタンス化
@RequestMapping(value = "/getTest")
public String getAll() {
return service.getTest();
}
}
@Component
※ComponentTestApplication.java
@SpringBootApplication
public class ComponentTestApplication {
public static void main(String[] args) {
SpringApplication.run(ComponentTestApplication.class, "TEST");
}
}
※MyComponent.java
@Component
public class MyComponent {
private List<String> list;
public List<String> getList() {
return this.list;
}
@Autowired
public MyComponent (ApplicationArguments args) {
this.list = args.getNonOptionArgs();
this.list:TEST
}
}
※MyRestContoller.java
@RestController
public class MyRestContoller {
@Autowired
private MyComponent component;
MyComponentを探して自動インスタンス化
@Autowiredが付加されたコンストラクタを実行
@RequestMapping(value = "/rest")
public String restAll() {
return component.getList().get(0);
}
}
@Configuration+@Bean
※MyBean.java
public class MyBean {
public String getTest1(){
return "TEST1";
}
public String getTest2(){
return "TEST2";
}
}
※MyAppConfig.java
@Configuration
public class MyAppConfig {
@Bean
public MyBean getMyBean(){
return new MyBean();
}
}
※MyRestContoller.java
@RestController
public class MyRestContoller {
@Autowired
private MyBean bean;
MyBeanを探して自動インスタンス化
@RequestMapping(value = "/getTest")
public String restAll() {
return bean.getTest1() + bean.getTest2();
}
}