ååã¯ãSpring IoCã³ã³ãããšãã³ã³ããã管çããBeanã®åºæ¬çãªå®çŸ©æ¹æ³ã«ã€ããŠåŠã³ãŸããã
ä»åã¯ããã®Beanå士ãçµã³ã€ããä»çµã¿ãããªãã¡ãDIïŒäŸåæ§ã®æ³šå ¥ïŒããæ·±æãããŸããDIã«ã¯äž»ã«3ã€ã®ããæ¹ããããæ¥åã·ã¹ãã èšèšã®å質ãé«ããããã«ã¯ãã©ã®æ¹æ³ã䜿ãã¹ãããçè§£ããŠããããšãéèŠã§ãã
1. äŸåæ§ã®æ³šå ¥ïŒDIïŒã®3ã€ã®æ¹æ³
DIãšã¯ãããã¯ã©ã¹ãå©çšããå¥ã®ã¯ã©ã¹ïŒäŸåãªããžã§ã¯ãïŒããSpringã³ã³ãããèªåã§**æäŸïŒæ³šå ¥ïŒ**ããããšã§ããã
æ³šå ¥ããæ¹æ³ã«ã¯ããã³ã³ã¹ãã©ã¯ã¿ããã»ãã¿ãŒãããã£ãŒã«ããã®3çš®é¡ããããŸãã
1-1. ã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ (Constructor Injection)
ã³ã³ã¹ãã©ã¯ã¿ïŒãªããžã§ã¯ããçæããéã®åæåã¡ãœããïŒã®åŒæ°ãšããŠãå¿ èŠãªBeanãæž¡ããŠãããæ¹æ³ã§ãã
ãããSpring Bootã«ãããæãæšå¥šãããDIã®æ¹æ³ã§ãã
Java
@Service
public class ReportService {
// â å¿
èŠãªäŸåãªããžã§ã¯ãïŒBeanïŒãfinalã§å®çŸ©
private final DataRepository repository;
// â¡ ã³ã³ã¹ãã©ã¯ã¿ã®åŒæ°ãšããŠæ³šå
¥ãäŸé Œ
// Spring Boot 2.x以éãBeanãäžã€ã§ããã°@Autowiredã¯çç¥å¯èœ
public ReportService(DataRepository repository) {
// ⢠泚å
¥ããããªããžã§ã¯ãããã£ãŒã«ãã«ä»£å
¥
this.repository = repository;
}
public void generateReport() {
repository.fetchData();
System.out.println("ã¬ããŒããçæããŸããã");
}
}
â ã¡ãªããïŒãã¹ããã©ã¯ãã£ã¹ã®çç±ïŒ
- äžå€æ§ïŒImmutabilityïŒ: ãã£ãŒã«ãã
finalã«ã§ããããããªããžã§ã¯ãçæåŸã«äŸåãªããžã§ã¯ããåæã«æžãæããããã®ãé²ããŸããããã¯å®å šãªèšèšã®åºæ¬ã§ãã - äŸåé¢ä¿ã®æç¢ºå: ã©ã®Beanãå¿ èŠããäžç®çç¶ã«ãªããå¿ èŠãªäŸåãæããªããšãªããžã§ã¯ããçæã§ããªããããå®å šæ§ãé«ãã§ãã
1-2. ãã£ãŒã«ãã€ã³ãžã§ã¯ã·ã§ã³ (Field Injection)
ãã£ãŒã«ãïŒã¯ã©ã¹ã®å€æ°ïŒã«å¯ŸããŠçŽæ¥ãSpringã³ã³ããã«å€ãæ³šå ¥ããŠãããæ¹æ³ã§ããèšè¿°ãæãç°¡åã§ãã
Java
@Service
public class ReportService {
// â ãã£ãŒã«ãã«çŽæ¥ @Autowired ãä»ããŠæ³šå
¥ãäŸé Œ
@Autowired
private DataRepository repository; // finalã«ã§ããªã
public void generateReport() {
repository.fetchData();
System.out.println("ã¬ããŒããçæããŸããã");
}
}
â ãã¡ãªãã
- äžå€æ§ã®æ¬ åŠ:
finalã«ã§ããªãããããªããžã§ã¯ãçæåŸã«äŸåãªããžã§ã¯ããå€éšãã倿Žããããªã¹ã¯ããããŸãã - DIã³ã³ãããžã®äŸå: Springã®DIã³ã³ããããªããšãªããžã§ã¯ãã®çæãé£ãããªãããŠããããã¹ããå°é£ã«ãªãå ŽåããããŸãã
- é ãããäŸåé¢ä¿: äŸåããŠãããªããžã§ã¯ãããã£ãŒã«ãã«é ããŠããŸããããã³ãŒããé·ããªããšäŸåé¢ä¿ã®ææ¡ãé£ãããªããŸãã
1-3. ã»ãã¿ãŒã€ã³ãžã§ã¯ã·ã§ã³ (Setter Injection)
ã»ãã¿ãŒã¡ãœããïŒãã£ãŒã«ãã®å€ãèšå®ããã¡ãœããïŒãéããŠãå¿ èŠãªBeanãæ³šå ¥ããŠãããæ¹æ³ã§ãã
Java
@Service
public class ReportService {
private DataRepository repository; // finalã«ã§ããªã
// ã»ãã¿ãŒã¡ãœããã« @Autowired ãä»ããŠæ³šå
¥ãäŸé Œ
@Autowired
public void setRepository(DataRepository repository) {
this.repository = repository;
}
public void generateReport() {
repository.fetchData();
System.out.println("ã¬ããŒããçæããŸããã");
}
}
â ã¡ãªãã
- ãªãã·ã§ã³ã®äŸåé¢ä¿: äŸåãªããžã§ã¯ããå¿ é ã§ã¯ãªãå ŽåïŒæ³šå ¥ãããªããŠãåäœããå ŽåïŒã«æè»ã«å¯Ÿå¿ã§ããŸãã
â ãã¡ãªãã
- ã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ã«æ¯ã¹ãŠããã¯ãäžå€æ§ãä¿èšŒã§ããŸããã
- å¿ é ã®äŸåé¢ä¿ã«å¯ŸããŠäœ¿ããšãã»ãã¿ãŒãåŒã³åºãããªãå Žåã«ãªããžã§ã¯ããäžå®å šãªç¶æ ã«ãªããªã¹ã¯ããããŸãã
2. DIã®ãã¹ããã©ã¯ãã£ã¹ïŒã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ã®å©çš
æ¥åã·ã¹ãã éçºã«ãããŠã¯ãååãšããŠã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ã䜿ãã¹ãã§ãã
ãããã³ã³ã¹ãã©ã¯ã¿ã®åŒæ°ãå€ããªããããå Žåã¯ãããã¯ãã®ã¯ã©ã¹ã**å€ãã®åœ¹å²ãæã¡ãããŠããïŒè²¬åãéãããïŒ**ããšã瀺åããŠããŸãããã®å Žåã¯ãDIã®æ¹æ³ãå€ããã®ã§ã¯ãªããã¯ã©ã¹ãåå²ããããšãæ€èšããŸãããã
Springã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ãããç°¡åã«èšè¿°ããããã« Lombok ãšããã©ã€ãã©ãªã® @RequiredArgsConstructor ã䜿ãããšãäžè¬çã§ãã
Lombokã䜿ã£ãç°¡ç¥å
Lombokã® @RequiredArgsConstructor ã䜿ããšãfinal ãã£ãŒã«ããåŒæ°ã«æã€ã³ã³ã¹ãã©ã¯ã¿ãèªåã§çæããŠããããããDIã®èšè¿°ãããã«ç°¡æœã«ãªããŸãã
Java
// Lombokã®ã¢ãããŒã·ã§ã³ãfinalãã£ãŒã«ããæã€ã³ã³ã¹ãã©ã¯ã¿ãèªåçæããã
@RequiredArgsConstructor
@Service
public class ReportService {
// finalãªãã£ãŒã«ãã«èªåã§DIããã
private final DataRepository repository;
public void generateReport() {
repository.fetchData();
System.out.println("Lombokã§ç°¡ç¥åãããŸããã");
}
// ã³ã³ã¹ãã©ã¯ã¿ãèªåã§æžãå¿
èŠããªãïŒ
}
3. @Autowired ã®å Žæ
@Autowired ã¯ãSpringã³ã³ããã«ãããã«äŸåãªããžã§ã¯ããæ³šå
¥ããŠãã ããããšæç€ºããããã®ã¢ãããŒã·ã§ã³ã§ãã
| æ³šå ¥æ¹æ³ | @Autowired ã®å Žæ |
| ã³ã³ã¹ãã©ã¯ã¿ | ã³ã³ã¹ãã©ã¯ã¿ã®äžïŒSpring Bootã§ã¯çç¥å¯èœïŒ |
| ãã£ãŒã«ã | ãã£ãŒã«ãã®äž |
| ã»ãã¿ãŒ | ã»ãã¿ãŒã¡ãœããã®äž |
Spring Bootã§ã¯ãç¹ã«çç±ããªããã°LombokãæŽ»çšããã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ãæ¡çšããã®ããæãå®å šã§ã¢ãã³ãªæžãæ¹ãšãããŠããŸãã
â æ¬æ¥ã®ãŸãšã
- DIã«ã¯ã³ã³ã¹ãã©ã¯ã¿ããã£ãŒã«ããã»ãã¿ãŒã®3çš®é¡ãããã
- ã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ã¯ãäžå€æ§ãä¿èšŒããäŸåé¢ä¿ãæç¢ºã«ãããããæãæšå¥šãããæ¹æ³ã§ããã
finalãã£ãŒã«ãã䜿ãããšã§ãBeanã®å®å šæ§ãé«ãŸãã- æ¥åéçºã§ã¯ãLombokã®
@RequiredArgsConstructorã䜿ã£ãŠã³ã³ã¹ãã©ã¯ã¿ã€ã³ãžã§ã¯ã·ã§ã³ãç°¡ç¥åããã®ãäžè¬çã§ããã
ð æ¬¡åäºå
ä»åã§DIã®ä»çµã¿ãå®å
šã«çè§£ããŸãããæ¬¡åã¯ãç§ãã¡ãåã
åãã䜿ã£ãŠãã @Service ã @Controller ãšãã£ãSpringã®ã¢ãããŒã·ã§ã³ã«çŠç¹ãåœãŠãŸãã
ãããã®ã¢ãããŒã·ã§ã³ããã©ã®ããã«ããŠSpringã³ã³ããã«BeanãšããŠèªèããããŸãã©ã®ããã«åœ¹å²ãåæ
ããŠããã®ãããåºç€ãšãªã @Autowired ãšãšãã«è©³ãã解説ããŸãã
次åïŒã第8åãã¢ãããŒã·ã§ã³ããŒã¹ã®èšå® (1) – @Autowired ã«ãæåŸ ãã ããïŒ


ã³ã¡ã³ã