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();
 }
}

@Repository

Spring Boot 6 データベース操作」参照

コメントを残す

メールアドレスが公開されることはありません。