ååã¯ãæ¥åã·ã¹ãã ã®äžå±€æ§é ã«å¯Ÿå¿ãã @Component ç³»ã®ã¢ãããŒã·ã§ã³ãåŠã³ãBeanã®åœ¹å²ãæç¢ºã«ããŸããã
ä»åã¯ãSpring IoCã³ã³ããã管çããBeanã®ã寿åœããšãç¯å²ããããªãã¡ãã¹ã³ãŒãããšãã©ã€ããµã€ã¯ã«ãã«ã€ããŠè§£èª¬ããŸãããããã®æŠå¿µã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªäœ¿çšéãã¹ã¬ããå®å šæ§ïŒåæã¢ã¯ã»ã¹æã®åé¡ïŒã«çŽçµãããããæ¥åã·ã¹ãã èšèšã«ãããŠæ¥µããŠéèŠã§ãã
1. Beanã®ã¹ã³ãŒããšã¯ïŒ
ã¹ã³ãŒã (Scope) ãšã¯ãããã®Beanã®ã€ã³ã¹ã¿ã³ã¹ãããã€ãããã€çæããããããæ±ºå®ããç¯å²ã®ããšã§ãã
Spring Frameworkã«ã¯ããã€ãã®ã¹ã³ãŒãããããŸãããæãéèŠãªã®ã¯ãSingletonããšãPrototypeãã®2ã€ã§ãã
| ã¹ã³ãŒãå | æå³ | åäœ | Springã§ã®æšå¥š |
| Singleton | ã³ã³ããå šäœã§ãã£ãäžã€ã®ã€ã³ã¹ã¿ã³ã¹ãå ±æããã | ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«äžåºŠã ãçæããããã£ãšäœ¿ãåãããã | ããã©ã«ãã§ãããã»ãšãã©ã®Beanã§å©çšãã¹ãã |
| Prototype | DIãååŸã®èŠæ±ããããã³ã«ãæ°ããã€ã³ã¹ã¿ã³ã¹ãçæããã | è€æ°åèŠæ±ããã°ããã®éœåºŠæ°ãããªããžã§ã¯ããäœãããã | ç¶æ ãæã€Beanãã¹ã¬ããããšã«ç¬ç«ããããå Žåã«å©çšã |
1-1. SingletonïŒã·ã³ã°ã«ãã³ïŒã®é©çš
Spring Beanã®ããã©ã«ãã®ã¹ã³ãŒãã§ããç¹å¥ãªçç±ããªãéãããã¹ãŠã® @Service ã @Repository ã¯SingletonãšããŠå®çŸ©ãããŸãã
ã¡ãªãã:
- ã¡ã¢ãªã®ç¯çŽã«ãªããŸãã
- ã»ãšãã©ã®Springã®Beanã¯ç¶æ ãæããªãïŒã¹ããŒãã¬ã¹ïŒãããSingletonã§å®å šã«å ±æã§ããŸãã
1-2. PrototypeïŒãããã¿ã€ãïŒã®é©çš
Beanã䜿ããã³ã«æ°ããã€ã³ã¹ã¿ã³ã¹ãå¿
èŠãªå Žåã¯ã@Scope("prototype") ãæå®ããŸãã
Java
// èŠæ±ããããã³ã«æ°ããã€ã³ã¹ã¿ã³ã¹ãçæãããBean
@Component
@Scope("prototype")
public class TaskProcessor {
// ç¶æ
ãæã€ãã£ãŒã«ãïŒäŸïŒãã®ã¿ã¹ã¯åºæã®åŠçç¶æ³ïŒ
private String currentTask;
public void start(String taskName) {
this.currentTask = taskName;
System.out.println("ã¿ã¹ã¯ " + taskName + " ãéå§ãããŸããã");
}
}
Prototypeã®æ³šæç¹:
Prototype Beanã¯SpringãçæãŸã§ã¯ç®¡çããŸãããç Žæ£ïŒdestroyïŒã®ç®¡çã¯è¡ããŸããããã®ããããªãœãŒã¹ã®è§£æŸãå¿ èŠãªå Žåã¯ãããã°ã©ããæåã§è¡ãå¿ èŠããããŸãã
1-3. Webã¹ã³ãŒãïŒWebã¢ããªã±ãŒã·ã§ã³ç¹æïŒ
Webã¢ããªã±ãŒã·ã§ã³éçºïŒæ¬¡å以é詳ããæ±ããŸãïŒã§ã¯ãããã«ä»¥äžã®ã¹ã³ãŒãã䜿ãããããšããããŸãã
request: HTTPãªã¯ãšã¹ãããšã«æ°ããBeanãçæãããã¬ã¹ãã³ã¹ãè¿ããšç Žæ£ãããŸããsession: HTTPã»ãã·ã§ã³ããšã«æ°ããBeanãçæãããã»ãã·ã§ã³ãçµäºãããšç Žæ£ãããŸãã
2. Beanã®ã©ã€ããµã€ã¯ã«ïŒçæããç Žæ£ãŸã§ã®éã®ã
Beanã®ãã©ã€ããµã€ã¯ã«ããšã¯ãIoCã³ã³ãããBeanãçæããŠãããã¢ããªã±ãŒã·ã§ã³ã®çµäºãªã©ã§ç Žæ£ããããŸã§ã®éçšã®ããšã§ãã
ããã°ã©ãã¯ãBeanã®**ãåæåïŒçæçŽåŸïŒãããç Žæ£ïŒçµäºçŽåïŒã**ã®ã¿ã€ãã³ã°ã§ãç¹å®ã®åŠçãå®è¡ã§ããŸãã
2-1. åæååŠç (Initialization)
Beanã®å šäŸåé¢ä¿ïŒDIïŒãæ³šå ¥ããããªããžã§ã¯ããå®å šã«æºåã§ããçŽåŸã«å®è¡ãããåŠçã§ãã
äŸãã°ãåæããŒã¿ãããŒãããããå€éšãªãœãŒã¹ãžã®æ¥ç¶ã確ç«ãããããå Žåã«äœ¿ããŸãã
ã¢ãããŒã·ã§ã³ã«ããæå®:
@PostConstruct ã¢ãããŒã·ã§ã³ãã¡ãœããã«ä»ããããšã§ãåæååŠçãšããŠæå®ã§ããŸãã
Java
@Service
public class DataInitializer {
// DIãå®äºããåŸïŒã³ã³ã¹ãã©ã¯ã¿ãå®è¡ãããåŸïŒã«åŒã°ãã
@PostConstruct
public void init() {
System.out.println("ãåæååŠçãåæããŒã¿ãããŒã¿ããŒã¹ã«ããŒãããŸãã");
// åæããŒã¿ããŒããªã©ã®åŠçãèšè¿°
}
}
2-2. ç Žæ£åŠç (Destruction)
ã¢ããªã±ãŒã·ã§ã³ãçµäºããéãªã©ãBeanãã³ã³ããããç Žæ£ãããçŽåã«å®è¡ãããåŠçã§ãã
äŸãã°ãéããããŒã¿ããŒã¹æ¥ç¶ãéããããã¡ã¢ãªäžã®ãã£ãã·ã¥ãã¯ãªã¢ãããããå Žåã«äœ¿ããŸãã
ã¢ãããŒã·ã§ã³ã«ããæå®:
@PreDestroy ã¢ãããŒã·ã§ã³ãã¡ãœããã«ä»ããããšã§ãç Žæ£åŠçãšããŠæå®ã§ããŸãã
Java
@Service
public class ResourceCloser {
// Beanãç Žæ£ãããçŽåïŒã³ã³ãããã·ã£ããããŠã³ããããšãïŒã«åŒã°ãã
@PreDestroy
public void cleanup() {
System.out.println("ãç Žæ£åŠçãããŒã¿ããŒã¹æ¥ç¶ãå®å
šã«éããŸãã");
// ãªãœãŒã¹è§£æŸåŠçãèšè¿°
}
}
3. Beanã©ã€ããµã€ã¯ã«ã®æµãïŒSingletonã®å ŽåïŒ
Singleton Beanã®ã©ã€ããµã€ã¯ã«ã¯ã以äžã®é åºã§å®è¡ãããŸãã
- ã€ã³ã¹ã¿ã³ã¹å: ã³ã³ãããJavaã®
newæŒç®åãåŒã³åºããBeanã®ãªããžã§ã¯ããçæã - äŸåæ§ã®æ³šå
¥ïŒDIïŒ:
@Autowiredãªã©ã«åºã¥ããå¿ èŠãªäŸåBeanãæ³šå ¥ã - åæå:
@PostConstructãä»ããåæåã¡ãœãããå®è¡ã - å©çš: ã¢ããªã±ãŒã·ã§ã³å ã§å©çšãããã
- ç Žæ£: ã³ã³ããã忢ããéã«ã
@PreDestroyãä»ããç Žæ£ã¡ãœãããå®è¡ã
â æ¬æ¥ã®ãŸãšã
- ã¹ã³ãŒãã¯ãBeanã®ã€ã³ã¹ã¿ã³ã¹ãããã€çæãããããå®çŸ©ããã
- SingletonïŒã³ã³ããã§äžã€ïŒãããã©ã«ãã§ãããã»ãšãã©ã®**ã¹ããŒãã¬ã¹ïŒç¶æ ãæããªãïŒ**ãªBeanã«äœ¿çšãã¹ãã§ããã
- PrototypeïŒèŠæ±ããšã«æ°èŠïŒã¯ãç¶æ ãæã€Beanã«äœ¿çšããã
- ã©ã€ããµã€ã¯ã«ã«ãããŠã
@PostConstructã¯åæåæã«ã@PreDestroyã¯ç Žæ£æã«å®è¡ããåŠçãæå®ããã
ð æ¬¡åäºå
ããã§Spring Coreã®æãéèŠãªæŠå¿µã§ãã IoCã³ã³ãããDIãBeanã®å®çŸ©ãã¹ã³ãŒã ãå®å šã«ãã¹ã¿ãŒããŸããã
次åã¯ããããŸã§ã¢ãããŒã·ã§ã³ã䜿ã£ãŠããBeanå®çŸ©ãããããŠJavaã³ãŒãã§èšè¿°ãããJava Configãã«ã€ããŠåŠã³ãŸããããã¯ãå€éšã©ã€ãã©ãªã®Beanãå®çŸ©ããããBeanã®çæããžãã¯ãè€éã«ãããå Žåã«å¿ é ã®ãã¯ããã¯ã§ãã
次åïŒã第11åãJava Configã«ããèšå® ã«ãæåŸ ãã ããïŒ


ã³ã¡ã³ã