μ΄ μ₯μμλ IoC (Inversion of Control) μ리μ Spring Framework ꡬνμ λν΄ λ€λ£Ήλλ€.
IoCλ μ’
μμ± μ£Όμ
(DI) μ΄λΌκ³ λν©λλ€.
μ΄κ²μ κ°μ²΄κ° μμ±μ μΈμ, ν©ν 리 λ©μλμ λν μΈμ λλ ν©ν 리 λ©μλμμ μμ±λκ±°λ
λ¦¬ν΄ λ κ°μ²΄ μΈμ€ν΄μ€μ μ€μ λ νΉμ±μ ν΅ν΄μλ§ μ’
μμ±, μ¦ μμ
νλ λ€λ₯Έ κ°μ²΄λ₯Ό μ μνλ νλ‘μΈμ€μ
λλ€.
κ·Έλ° λ€μ 컨ν
μ΄λλ Beanμ μμ±ν λ μ΄λ¬ν μ’
μμ±μ μ£Όμ
ν©λλ€.
μ΄ νλ‘μΈμ€λ κ·Όλ³Έμ μΌλ‘ λ°λΉλ‘νλ―λ‘ ν΄λμ€ μ§μ μμ± λλ Service Locator ν¨ν΄κ³Ό κ°μ
λ©μ»€λμ¦μ μ¬μ©νμ¬ μ’
μμ±μ μΈμ€ν΄μ€ λλ μμΉλ₯Ό μ μ΄νλ Bean μ체μ Inversion of Control (IoC)μ
λλ€.
org.springframework.beans
μ org.springframework.context
ν¨ν€μ§λ Spring Frameworkμ IoC 컨ν
μ΄λμ κΈ°μ΄
ApplicationContext
λ Bean factoryμ μμ ν μνΌμ
Bean factory
BeanFactory μΈν°νμ΄μ€λ λͺ¨λ μ νμ κ°μ²΄λ₯Ό κ΄λ¦¬ ν μμλ κ³ κΈ κ΅¬μ± λ©μ»€λμ¦μ μ 곡ν©λλ€.
BeanFactoryλ κ΅¬μ± νλ μ μν¬μ κΈ°λ³Έ κΈ°λ₯μ μ 곡
ApplicationContext
ApplicationContextλ BeanFactoryμ νμ μΈν°νμ΄μ€μ
λλ€.
ApplicationContextλ λ λ§μ μν°νλΌμ΄μ¦ λ³ κΈ°λ₯μ μΆκ°ν©λλ€.
Springμμλ μ ν리μΌμ΄μ
μ λ°±λ³Έμ νμ±νκ³
Spring IoC 컨ν
μ΄λμ μν΄ κ΄λ¦¬λλ κ°μ²΄λ₯Ό Beanμ΄λΌκ³ λΆλ₯Έλ€.
Beanμ Spring IoC 컨ν
μ΄λμ μν΄ μΈμ€ν΄μ€ν, μ΄μ
λΈ λ§ λ° κ΄λ¦¬λλ κ°μ²΄μ΄λ€.
μμ λ§μ²λΌ κ΄λ¦¬λμ§ μλλ€λ©΄ λΉμ μμ© νλ‘κ·Έλ¨μ λ§μ κ°μ²΄ μ€ νλ μΌλΏμ
λλ€.
λΉλ€κ³Ό κ·Έ μ¬μ΄μ μμ‘΄μ±μ 컨ν μ΄λκ° μ¬μ©νλ 컨νΌκ·λ μ΄μ λ©ν λ°μ΄ν°μ λ°μλ©λλ€.
org.springframework.context.ApplicationContext
μΈν°νμ΄μ€λ
Spring IoC 컨ν
μ΄λλ₯Ό λνλ΄λ©°
μμ μΈκΈ ν beanμ μΈμ€ν΄μ€ν, κ΅¬μ± λ° μ΄μ
λΈ ν μ±
μμ΄μλ€.
컨ν
μ΄λλ κ΅¬μ± λ©ν λ°μ΄ν°λ₯Ό μ½μμΌλ‘μ¨ μΈμ€ν΄μ€ν, κ΅¬μ± λ° μ΄μ
λΈ ν κ°μ²΄μ λν μ§μΉ¨μ κ°μ Έμ΅λλ€.
κ΅¬μ± λ©ν λ°μ΄ν°λ XML, Java μ΄λ
Έν
μ΄μ
λλ Java μ½λλ‘ νμλ©λλ€.
μ΄ λꡬλ₯Ό μ¬μ©νλ©΄ μμ© νλ‘κ·Έλ¨μ ꡬμ±νλ κ°μ²΄μ κ·Έλ¬ν κ°μ²΄ κ°μ νλΆν μνΈ μ’
μμ±μ ννν μ μμ΅λλ€.
ApplicationContext μΈν°νμ΄μ€μ μ¬λ¬ ꡬνμ Springκ³Ό ν¨κ» μ¦μ μ 곡λ©λλ€.
λ
립 μ€ν ν μμ© νλ‘κ·Έλ¨μμλ
ClassPathXmlApplicationContext
λλ FileSystemXmlApplicationContext
μ μΈμ€ν΄μ€λ₯Ό λ§λλ κ²μ΄ μΌλ°μ μ
λλ€.
XMLμ 컨νΌκ·λ μ΄μ
λ©ν λ°μ΄ν°λ₯Ό μ μνκΈ°μν μ ν΅μ μΈ νμ μ΄μμ§λ§
컨ν
μ΄λμ Java μ£Όμμ΄λ μ½λλ₯Ό λ©ν λ°μ΄ν° νμμΌλ‘ μ¬μ©νλλ‘ μ§μ ν μ μμ΅λλ€.
...
Spring IoC 컨ν
μ΄λλ κ΅¬μ± λ©ν λ°μ΄ν°μ ννλ₯Ό μ¬μ©νλ€.
μ΄ κ΅¬μ± λ©ν λ°μ΄ν°λ μ ν리μΌμ΄μ
κ°λ°μκ° Spring 컨ν
μ΄λμκ²
μ ν리μΌμ΄μ
μ κ°μ²΄λ₯Ό μΈμ€ν΄μ€ν, κ΅¬μ± λ° μ΄μ
λΈνλλ‘ μ§μνλ λ°©λ²μ λνλ
λλ€.
컨νΌκ·λ μ΄μ
λ©ν λ°μ΄ν°λ μ ν΅μ μΌλ‘ κ°λ¨νκ³ μ§κ΄μ μΈ XML νμμΌλ‘ μ 곡λλ©°,
μ΄ μ₯μ λλΆλΆμ Spring IoC 컨ν
μ΄λμ μ£Όμ κ°λ
κ³Ό κΈ°λ₯μ μ λ¬νλ λ° μ¬μ©λλ€.
**XML κΈ°λ° λ©ν λ°μ΄ν°λ κ΅¬μ± λ©ν λ°μ΄ν°μ μ μΌν νμ© νμμ΄ μλλλ€.
Spring IoC 컨ν μ΄λ μ체λμ΄ κ΅¬μ± λ©ν λ°μ΄ν°κ° μ€μ λ‘ μμ±λ νμκ³Ό μμ ν λΆλ¦¬λμ΄μλ€.
μμ¦ λ§μ κ°λ°μλ€μ΄ Spring μ ν리μΌμ΄μ μμν Java κΈ°λ°μ ꡬμ±μ μ νν©λλ€.
Spring 컨ν
μ΄λμμ λ€λ₯Έ νμμ λ©ν λ°μ΄ν°λ₯Ό μ¬μ©νλ λ°©λ²μ λν μ 보λ λ€μμ μ°Έμ‘°νμμμ€.
μ΄λ
Έν
μ΄μ
κΈ°λ° μ€μ
: μ€νλ§ 2.5λ μ΄λ
Έν
μ΄μ
κΈ°λ° μ€μ λ©ν λ°μ΄ν°μ λν μ§μμ λμ
νλ€.
Java κΈ°λ° κ΅¬μ±
: Spring 3.0λΆν°λ Spring JavaConfig νλ‘μ νΈκ° μ 곡νλ λ§μ κΈ°λ₯λ€μ΄ ν΅μ¬ Spring νλ μ μν¬μ μΌλΆκ°λμλ€.
λ°λΌμ XML νμΌμ΄ μλ Javaλ₯Ό μ¬μ©νμ¬ μμ© νλ‘κ·Έλ¨ ν΄λμ€ μΈλΆμ Beanμ μ μ ν μ μμ΅λλ€.
μ΄λ¬ν μλ‘μ΄ κΈ°λ₯μ μ¬μ©νλ €λ©΄ @Configuration, @Bean, @Import λ° @DependsOn μ£Όμμ μ°Έμ‘°νμμμ€.
Spring μ€μ μ 컨ν
μ΄λκ° κ΄λ¦¬ν΄μΌνλ νλ μ΄μμ λΉ μ μλ‘ κ΅¬μ±λλ€.
XML κΈ°λ° κ΅¬μ± λ©ν λ°μ΄ν°λ μ΅μμ λ 벨 <beans />
μμ λ΄μ <bean />
μμλ‘ κ΅¬μ±λ μ΄λ¬ν beanμ νμν©λλ€.
Java ꡬμ±μ μΌλ°μ μΌλ‘ @Configuration
ν΄λμ€ λ΄μμ @Bean
μ£Όμμ΄μλ λ©μλλ₯Ό μ¬μ©ν©λλ€.
μ΄ bean
μ μλ μμ© νλ‘κ·Έλ¨μ ꡬμ±νλ μ€μ κ°μ²΄μ ν΄λΉν©λλ€.
??
μΌλ°μ μΌλ‘ μλΉμ€ κ³μΈ΅ κ°μ²΄, λ°μ΄ν° μ‘μΈμ€ κ°μ²΄ (DAO), Struts Action μΈμ€ν΄μ€μ κ°μ νλ μ ν
μ΄μ
κ°μ²΄,
Hibernate SessionFactories, JMS Queueμ κ°μ μΈνλΌ κ°μ²΄ λ±μ μ μν©λλ€.
μΌλ°μ μΌλ‘ λλ©μΈ κ°μ²΄λ₯Ό λ§λ€κ³ λ‘λνλ κ²μ DAOμ λΉμ¦λμ€ λ‘μ§μ μ±
μμ΄κΈ° λλ¬Έμ
μΌλ°μ μΌλ‘ 컨ν
μ΄λμ Fine-grained λλ©μΈ κ°μ²΄λ₯Ό ꡬμ±νμ§ μμ΅λλ€.
??
κ·Έλ¬λ AspectJμ Springμ ν΅ν©μ μ¬μ©νμ¬ IoC 컨ν
μ΄λμ μ μ΄ λ²μ λ°μμ μμ± λ κ°μ²΄λ₯Ό κ΅¬μ± ν μμλ€.
AspectJλ₯Ό μ¬μ©νμ¬ Springμ μμ‘΄μ± μ½μ
λλ©μΈ κ°μ²΄λ₯Ό μ°Έμ‘°νμμμ€.
λ€μ μμ λ XML κΈ°λ° κ΅¬μ± λ©ν λ°μ΄ν°μ κΈ°λ³Έ ꡬ쑰λ₯Ό 보μ¬μ€λλ€.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here(λ λ§μ bean μ μκ° μ¬κΈ°μμλ€.) -->
</beans>
id μμ±μ κ°λ³ bean μ μλ₯Ό μλ³νλ λ° μ¬μ©νλ λ¬Έμμ΄μ
λλ€.
class μμ±μ λΉμ μ νμ μ μνκ³ μμ ν ν΄λμ€ μ΄λ¦μ μ¬μ©ν©λλ€.
id μμ± κ°μ νμ
νλ κ°μ²΄λ₯Ό μ°Έμ‘°ν©λλ€.
νμ
μ€λΈμ νΈλ₯Ό μ°Έμ‘°νκΈ°μν XMLμμ΄ μμ μ νμλμ§ μμ΅λλ€.
μμΈν μ 보λ μ’
μμ±μ μ°Έμ‘°νμμμ€.
Spring IoC 컨ν
μ΄λλ₯Ό μΈμ€ν΄μ€ννλ κ²μ κ°λ¨νλ€.
ApplicationContext μμ±μμ μ 곡λ μμΉ κ²½λ‘λ μ€μ λ‘ μ»¨ν
μ΄λκ°
Java CLASSPATH λ±μ λ‘컬 νμΌ μμ€ν
κ³Ό κ°μ
λ€μν μΈλΆ 리μμ€μ κ΅¬μ± λ©ν λ°μ΄ν°λ₯Όλ‘λ ν μμκ²νλ 리μμ€ λ¬Έμμ΄μ
λλ€.
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
??
Springμ IoC 컨ν
μ΄λμ λν΄ μκ² λ νμλ Resourcesμμ μ€λͺ
ν κ²μ²λΌ
Springμ Resource μΆμνμ λν΄ λ μκ³ μΆμ κ²μ΄λ€.
URI ꡬ문μμ μ μ λ μμΉμμ InputStreamμ μ½λ νΈλ¦¬ν λ©μ»€λμ¦μ μ 곡νλ€.
νΉν 리μμ€ κ²½λ‘λ μμ© νλ‘κ·Έλ¨ μ»¨ν
μ€νΈ λ° λ¦¬μμ€ κ²½λ‘μμ μ€λͺ
νλλ‘ μμ© νλ‘κ·Έλ¨ μ»¨ν
μ€νΈλ₯Ό ꡬμ±νλ λ° μ¬μ©λ©λλ€.
??
λ€μ μμ μμλ μλΉμ€ κ³μΈ΅ κ°μ²΄ (services.xml) κ΅¬μ± νμΌμ 보μ¬μ€λλ€.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- services -->
<bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
<property name="accountDao" ref="accountDao"/>
<property name="itemDao" ref="itemDao"/>
<!-- additional collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions for services go here -->
</beans>
λ€μ μμ λ λ°μ΄ν° μ‘μΈμ€ κ°μ²΄ daos.xml νμΌμ 보μ¬μ€λλ€.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="accountDao"
class="org.springframework.samples.jpetstore.dao.jpa.JpaAccountDao">
<!-- additional collaborators and configuration for this bean go here -->
</bean>
<bean id="itemDao" class="org.springframework.samples.jpetstore.dao.jpa.JpaItemDao">
<!-- additional collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions for data access objects go here -->
</beans>
μμ μμμ μλΉμ€ κ³μΈ΅μ PetStoreServiceImpl ν΄λμ€μ JpaAccountDao λ° JpaItemDao μ νμ
λ λ°μ΄ν° μ‘μΈμ€ κ°μ²΄ (JPA κ°μ²΄ / κ΄κ³ 맀ν νμ€μ κΈ°λ°μΌλ‘ ν¨)λ‘ κ΅¬μ±λ©λλ€.
property name μμλ JavaBean μμ±μ μ΄λ¦μ μ°Έμ‘°νκ³ ref μμλ λ€λ₯Έ bean μ μμ μ΄λ¦μ μ°Έμ‘°ν©λλ€.
idμ ref μμ μ¬μ΄μμ΄ μ°κ²°μ 곡λ μμ
κ°μ²΄ κ°μ μ’
μμ±μ λνλ
λλ€.
κ°μ²΄μ μ’
μμ± κ΅¬μ±μ λν μμΈν λ΄μ©μ μ’
μμ±μ μ°Έμ‘°νμμμ€.
λΉ μ μκ° μ¬λ¬ XML νμΌμ κ±Έμ³μλ κ²μ΄ μ μ© ν μ μμ΅λλ€.
κ° κ°λ³ XML κ΅¬μ± νμΌμ μ’
μ’
μν€ν
μ²μ λ
Όλ¦¬ κ³μΈ΅ λλ λͺ¨λμ λνλ
λλ€.
μμ© νλ‘κ·Έλ¨ μ»¨ν
μ€νΈ μμ±μλ₯Ό μ¬μ©νμ¬ λͺ¨λ XML μ‘°κ°μμ bean μ μλ₯Όλ‘λ ν μ μμ΅λλ€.
μ΄ μμ±μλ μ΄μ μΉμ
μμ μ€λͺ
ν κ²μ²λΌ μ¬λ¬ Resource μμΉλ₯Ό μ¬μ©ν©λλ€.
λλ νλ μ΄μμ <import />
μμλ₯Ό μ¬μ©νμ¬ λ€λ₯Έ νμΌμ bean μ μλ₯Όλ‘λνμμμ€.
μ :
<beans>
<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>
<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>
</beans>
μμ μμ μμ μΈλΆ bean μ μλ μΈ νμΌμμλ‘λλ©λλ€.
services.xml, messageSource.xml λ° themeSource.xml
services.xmlμ importλ₯Ό μννλ νμΌκ³Ό λμΌν λλ ν 리 λλ ν΄λμ€ κ²½λ‘ μμΉμ μμ΄μΌνλ©°,
messageSource.xml λ° themeSource.xmlμ resource/ μμΉμ μμ΄μΌν©λλ€.
보μλ€μνΌ, μ ν μ¬λμλ 무μλμ§λ§,
μ΄ κ²½λ‘λ μλ κ²½λ‘μ΄λ―λ‘ μ¬λμλ₯Ό μ ν μ¬μ©νμ§ μλ κ²μ΄ λ μ’μ΅λλ€.
μ΅μμ μμ€ μΈ <beans />
μμλ₯Ό ν¬ν¨νμ¬ κ°μ Έμ¬ νμΌμ λ΄μ©μ
Spring μ€ν€λ§μ λ°λΌ μ ν¨ν XML bean μ μ μ¬μΌν©λλ€. ?
μλμ "../"κ²½λ‘λ₯Ό μ¬μ©νμ¬ μμ λλ ν 리μ νμΌμ μ°Έμ‘°νλ κ²μ κ°λ₯νμ§λ§ κΆμ₯νμ§λ μμ΅λλ€.
μ΄λ κ²νλ©΄ νμ¬ μμ© νλ‘κ·Έλ¨ μΈλΆμμλ νμΌμ λν μ’ μμ±μ΄ λ§λ€μ΄μ§λλ€.
νΉν,μ΄ μ°Έμ‘°λ "classpath :"URL (μ : "classpath : ../ services.xml")μλ κΆμ₯λμ§ μμ΅λλ€.
μ¬κΈ°μ λ°νμ νμΈ νλ‘μΈμ€λ "κ°μ₯ κ°κΉμ΄"ν΄λμ€ κ²½λ‘ λ£¨νΈλ₯Ό μ ννκ³ μμ λλ ν 리λ₯Ό μ‘°μ¬ν©λλ€.
ν΄λμ€ κ²½λ‘ κ΅¬μ± λ³κ²½μΌλ‘ μΈν΄ λ€λ₯Έ λλ ν λ¦¬κ° μλͺ» μ ν λ μ μμ΅λλ€.μλ κ²½λ‘ λμ μ κ·ν λ 리μμ€ μμΉλ₯Ό νμ μ¬μ©ν μ μμ΅λλ€ μ:"file:C:/config/services.xml" or "classpath:/config/services.xml"
κ·Έλ¬λ μμ© νλ‘κ·Έλ¨μ ꡬμ±μ νΉμ μ λ μμΉμ μ°κ²°νλ€λ μ μ μ μνμμμ€.
μΌλ°μ μΌλ‘ λ°νμμ JVM μμ€ν μμ±μ λν΄ νμΈλλ "$ {...}"μ리 νμμλ₯Ό ν΅ν΄
μ λ μμΉμ λν κ°μ μ°Έμ‘°λ₯Ό μ μ§νλ κ²μ΄ λ°λμ§ν©λλ€.
import μ§μλ¬Έμ bean λ€μ μ€νμ΄μ€ μ체μμ μ 곡νλ κΈ°λ₯μ
λλ€.
μΌλ° Bean μ μλ₯Ό λ°μ΄ λλ μΆκ° κ΅¬μ± κΈ°λ₯μ Springμμ μ 곡νλ XML λ€μ μ€νμ΄μ€ μ€μμ μ νν μ μμ΅λλ€.
"context"λ° "util"λ€μ μ€νμ΄μ€.
ApplicationContextλ λ€λ₯Έ Beanκ³Ό κ·Έ μμ‘΄μ±μ λ μ§μ€νΈλ¦¬λ₯Ό μ μ§ λ³΄μ ν μμλ κ³ κΈ ν©ν 리μ μΈν°νμ΄μ€μ
λλ€.
T getBean (String name, Class <T> requiredType)
λ©μλλ₯Ό μ¬μ©νμ¬ beanμ μΈμ€ν΄μ€λ₯Ό κ²μ ν μ μμ΅λλ€.
ApplicationContext
λ₯Ό μ¬μ©νλ©΄ Bean μ μλ₯Ό μ½κ³ λ€μκ³Ό κ°μ΄ μ‘μΈμ€ ν μ μμ΅λλ€.
// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
// retrieve configured instance(ꡬμ±λ μΈμ€ν΄μ€ κ²μ)
PetStoreService service = context.getBean("petStore", PetStoreService.class);
// use configured instance(ꡬμ±λ μΈμ€ν΄μ€ μ¬μ©)
List<String> userList = service.getUsernameList();
κ°μ₯ μ μ°ν λ³νμ GenericApplicationContext
μ΄λ©° 리λ μμμμ ν¨κ» μ¬μ©λ©λλ€.
XML νμΌ μ© XmlBeanDefinitionReader μ¬μ© :
GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");
context.refresh();
μ΄λ¬ν 리λ μμμλ λμΌν ApplicationContextμμ νΌν©λκ³ λ§€μΉλμ΄ μν κ²½μ° λ€μν κ΅¬μ± μμ€μ Bean μ μλ₯Ό μ½μ μ μμ΅λλ€.
κ·Έλ° λ€μ getBean
μ μ¬μ©νμ¬ λΉμ μΈμ€ν΄μ€λ₯Ό κ²μ ν μ μμ΅λλ€.
ApplicationContext μΈν°νμ΄μ€μλ Beanμ κ²μνλ λͺ κ°μ§ λ€λ₯Έ λ©μλκ° μμ§λ§
μ΄μμ μΌλ‘ μ ν리μΌμ΄μ
μ½λλ μ΄λ₯Ό μ¬μ©νμ§ μμμΌν©λλ€.
μ€μ λ‘ μ ν리μΌμ΄μ
μ½λμλ getBean () λ©μλμ λν νΈμΆμ΄ μ ν μμ΄μΌνλ―λ‘ Spring APIμ μ ν μμ‘΄νμ§ μλλ€.
μλ₯Ό λ€μ΄ Springμ μΉ νλ μ μν¬μμ ν΅ν©μ
컨νΈλ‘€λ¬ λ° JSF κ΄λ¦¬ λΉκ³Ό κ°μ λ€μν μΉ νλ μ μν¬ κ΅¬μ± μμμ λν μ’
μμ± μ£Όμ
μ μ 곡νλ―λ‘
λ©ν λ°μ΄ν° (μ : μλ μμ΄μ΄ λ§ μ£Όμ)λ₯Ό ν΅ν΄ νΉμ λΉμ λν μ’
μμ±μ μ μΈ ν μ μμ΅λλ€.
??
Spring IoC 컨ν
μ΄λλ νλ μ΄μμ λΉμ κ΄λ¦¬νλ€.
μ΄ beanμ 컨ν
μ΄λμ μ 곡νλ κ΅¬μ± λ©ν λ°μ΄ν° (μ : XML μ μμ μμ)λ‘ μμ±λ©λλ€.
컨ν
μ΄λ λ΄λΆμμ μ΄λ¬ν bean μ μλ (λ€λ₯Έ μ λ³΄λ€ μ¬μ΄μμ) λ€μ λ©ν λ°μ΄ν°λ₯Ό ν¬ν¨νλ BeanDefinition κ°μ²΄λ‘ ννλ©λλ€.
- (A package-qualified class name:)ν¨ν€μ§ μμ ν΄λμ€ λͺ : μΌλ°μ μΌλ‘, μ μλκ³ μλ beanμ μ€μ μ ꡬν ν΄λμ€.
- Beanμ΄ μ»¨ν μ΄λμμ μλνλ λ°©λ² (λ²μ, μλͺ μ£ΌκΈ° μ½λ°± λ±)μ λνλ΄λ Bean λΉν€μ΄λΉμ΄ κ΅¬μ± μμ. ?
- Beanμ΄ μμ μ μννλ λ° νμν λ€λ₯Έ beanμ λν μ°Έμ‘°. μ΄λ¬ν μ°Έμ‘°λ 곡λ μμ μ(called collaborators) λλ μ’ μμ±μ΄λΌκ³ λν©λλ€.
- μλ‘ μμ± λ κ°μ²΄μ μ€μ ν κΈ°ν κ΅¬μ± μ€μ (μ : μ°κ²° νμ κ΄λ¦¬νλ Beanμμ μ¬μ©ν μ°κ²° μ λλ νμ ν¬κΈ° μ ν).
μ΄ λ©ν λ°μ΄ν°λ κ° bean μ μλ₯Ό ꡬμ±νλ μμ± μΈνΈλ‘ λ³νλ©λλ€.
bean μ μ
Property | Explained in⦠|
---|---|
class | Instantiating beans |
name | Naming beans |
scope | Bean scopes |
constructor arguments Β | Dependency Injection |
properties | Dependency Injection |
autowiring mode | Autowiring collaborators |
lazy-initialization mode | Lazy-initialized beans |
initialization method | Initialization callbacks |
destruction method | Destruction callbacks |
νΉμ beanμ μμ±νλ λ°©λ²μ λν μ λ³΄κ° λ€μ΄μλ bean μ μ μΈμ,
ApplicationContext ꡬνμ μ¬μ©μκ° μ»¨ν
μ΄λ μΈλΆμμ μμ± λ κΈ°μ‘΄ κ°μ²΄μ λ±λ‘λ νμ©ν©λλ€.
μ΄κ²μ BeanFactory ꡬν DefaultListableBeanFactoryλ₯Ό 리ν΄νλ getBeanFactory () λ©μλλ₯Ό ν΅ν΄
ApplicationContextμ BeanFactoryμ μ‘μΈμ€ν¨μΌλ‘μ¨ μ΄λ£¨μ΄μ§λ€.
DefaultListableBeanFactoryλ registerSingleton (..) λ° registerBeanDefinition (..) λ©μλλ₯Ό ν΅ν΄μ΄ λ±λ‘μ μ§μν©λλ€.
κ·Έλ¬λ μΌλ°μ μΈ μμ© νλ‘κ·Έλ¨μ λ©ν λ°μ΄ν° bean μ μλ₯Ό ν΅ν΄ μ μ λ beanμμλ§ μλν©λλ€.
Bean λ©ν λ°μ΄ν°μ μλμΌλ‘ μ 곡λλ μ±κΈ ν€ μΈμ€ν΄μ€λ μλ μμ΄μ΄ λ§ λ° κΈ°ν μΈνΈλ‘ μ€ν μ λ¨κ³μμ
컨ν μ΄λκ° μ»¨ν μ΄λμ λν΄ μ μ ν μΆλ‘ ν μ μλλ‘ κ°λ₯ν 빨리 λ±λ‘ν΄μΌν©λλ€.
κΈ°μ‘΄ λ©ν λ°μ΄ν°μ κΈ°μ‘΄ μ±κΈ ν€ μΈμ€ν΄μ€μ μ€λ²λΌμ΄λλ μ΄λ μ λ μ§μλμ§λ§,
λ°νμμ μ beanμ λ±λ‘ (ν©ν 리μ λν λΌμ΄λΈ μ‘μΈμ€μ λμμ)μ 곡μμ μΌλ‘ μ§μλμ§ μμΌλ©°
콩 컨ν μ΄λμμ λμ μ‘μΈμ€ μμΈ λ° / λλ λΆμΌμΉ μνλ₯Ό μ λ°ν μ μμ΅λλ€. ?
Naming beans
λͺ¨λ λΉμλ νλ μ΄μμ μλ³μκ° μμ΅λλ€.
μ΄λ¬ν μλ³μλ Beanμ νΈμ€ν
νλ 컨ν
μ΄λ λ΄μμ κ³ μ ν΄μΌν©λλ€.
beanμ λκ° λ¨ νλμ μλ³μλ₯Ό κ°μ§κ³ μμ§λ§, νλ μ΄μμ μλ³μκ° νμν κ²½μ° μ¬λΆμ μλ³μλ λ³μΉμΌλ‘ κ°μ£Ό λ μ μμ΅λλ€.
XML κΈ°λ° κ΅¬μ± λ©ν λ°μ΄ν°μμ id λ° / λλ name μμ±μ μ¬μ©νμ¬ bean μλ³μλ₯Ό μ§μ ν©λλ€.
id μμ±μ μ¬μ©νλ©΄ μ νν νλμ idλ₯Ό μ§μ ν μ μμ΅λλ€.
μΌλ°μ μΌλ‘ μ΄λ¬ν μ΄λ¦μ μμ«μ ( 'myBean', 'fooService'λ±)μ΄μ§λ§ νΉμ λ¬Έμλ ν¬ν¨ ν μ μμ΅λλ€.
Beanμ λ€λ₯Έ λ³λͺ
μ λμ
νλ €λ κ²½μ°, μ΄λ¦ μμ±μ μΌν (,), μΈλ―Έμ½λ‘ (;) λλ 곡백μΌλ‘ ꡬλΆνμ¬ μ§μ ν μ μμ΅λλ€.
Spring 3.1 μ΄μ μ λ²μ μμ μμ¬μ κΈ°λ‘μΌλ‘ id μμ±μ κ°λ₯ν λ¬Έμλ₯Ό μ ννλ xsd : ID μ νμΌλ‘ μ μλμμ΅λλ€.
3.1λΆν°λ xsd : string μ νμΌλ‘ μ μλ©λλ€.
bean id κ³ μ μ±μ μ¬μ ν 컨ν
μ΄λμ μν΄ μνλμ§λ§ XML νμλ λ μ΄μ νμνμ§ μμ΅λλ€.
λΉμ λν μ΄λ¦μ΄λ IDλ₯Ό μ 곡 ν νμλ μμ΅λλ€.
μ΄λ¦μ΄λ IDκ° λͺ
μ μ μΌλ‘ μ 곡λμ§ μμΌλ©΄ 컨ν
μ΄λλ ν΄λΉ beanμ λν΄ κ³ μ ν μ΄λ¦μ μμ±ν©λλ€.
κ·Έλ¬λ ref μμ λ Service Locator μ€νμΌ μ‘°νλ₯Ό μ¬μ©νμ¬ μ΄λ¦μΌλ‘ λΉμ μ°Έμ‘°νλ €λ κ²½μ° μ΄λ¦μ μ 곡ν΄μΌν©λλ€.
μ΄λ¦μ μ 곡νμ§ μλ λκΈ°νλ λ΄λΆ λΉμ μ¬μ©νκ³ κ³΅λ μμ
μλ₯Ό autowiringνλ κ²κ³Ό κ΄λ ¨λ©λλ€. Β
κ΄λ‘λ λΉμ λͺ λͺ ν λ μΈμ€ν΄μ€ μ΄λ¦κ³Ό κ°μ νμ€ Java κ·μΉμ μ¬μ©νλ κ²μ λλ€.
μ¦, λΉ μ΄λ¦μ μλ¬Έμλ‘ μμνκ³ μ΄νλ‘ camel-casedλ₯Ό μ¬μ©ν©λλ€. Β μ΄λ¬ν μ΄λ¦μ μλ (λ°μ΄ν μ μΈ) 'accountManager', 'accountService', 'userDao', 'loginController'λ±μ λλ€.
Beanμ μ΄λ¦μ κ³μ μ§μ νλ©΄ ꡬμ±μλ³΄λ€ μ½κ² μ½κ³ μ΄ν΄ν μ μμΌλ©°
Spring AOPλ₯Ό μ¬μ©νλ κ²½μ° μ΄λ¦κ³Ό κ΄λ ¨λ 콩 μΈνΈμ μ‘°μΈμ μ μ© ν λ λ§μ λμμ΄λ©λλ€.
Bean μ μ μΈλΆμμ Bean λ³λͺ
μ§μ
Bean μ μ μ체μμ, id μμ±μΌλ‘ μ§μ λ νλμ μ΄λ¦κ³Ό name μμ±μ λ€λ₯Έ μ΄λ¦μ μ‘°ν©μ μ¬μ©νμ¬
Beanμ λ μ΄μμ μ΄λ¦μ μ 곡 ν μ μμ΅λλ€.
μ΄ μ΄λ¦μ λμΌν Beanμ λν λλ±ν λ³λͺ
μ΄ λ μ μμΌλ©°,
μμ© νλ‘κ·Έλ¨μ κ° κ΅¬μ± μμκ° ν΄λΉ κ΅¬μ± μμ μ체μ κ³ μ ν bean μ΄λ¦μ μ¬μ©νμ¬
κ³΅ν΅ μ’
μμ±μ μ°Έμ‘°νλλ‘ νμ©νλ κ²κ³Ό κ°μ μΌλΆ μν©μ μ μ©ν©λλ€.
κ·Έλ¬λ beanμ΄ μ€μ λ‘ μ μ λ λͺ¨λ λ³λͺ
μ μ§μ νλ κ²μ΄ νμ μ μ ν κ²μ μλλλ€.
λλ‘λ λ€λ₯Έ κ³³μ μ μ λ beanμ λν λ³λͺ
μ μκ°νλ κ²μ΄ λ°λμ§ν©λλ€.
μ΄λ λκ° κ΅¬μ±μ΄ κ° μλΈ μμ€ν
μ¬μ΄μμ λΆν λλ λν μμ€ν
μμ κ° μλΈ μμ€ν
λ§λ€ κ³ μ ν μ€λΈμ νΈ μ μ μΈνΈλ₯Ό κ°λ κ²½μ°μ
λλ€. ?
XML κΈ°λ° κ΅¬μ± λ©ν λ°μ΄ν°μμ μμλ₯Ό μ¬μ©νμ¬μ΄λ₯Ό μν ν μ μμ΅λλ€.
<alias name="fromName" alias="toName"/>
μ΄ κ²½μ°, fromNameμ΄λΌλ μ΄λ¦μ λμΌν 컨ν
μ΄λμμλ beanμ μ΄ λ³λͺ
μ μ μ¬μ© ν toNameμΌλ‘ μ°Έμ‘° λ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, μλΈ μμ€ν
Aμ κ΅¬μ± λ©ν λ°μ΄ν°λ subsystemA-dataSourceλΌλ μ΄λ¦μΌλ‘ DataSourceλ₯Ό μ°Έμ‘° ν μ μμ΅λλ€.
μλΈ μμ€ν
Bμ κ΅¬μ± λ©ν λ°μ΄ν°λ subsystemB-dataSourceλΌλ μ΄λ¦μΌλ‘ DataSourceλ₯Ό μ°Έμ‘° ν μ μμ΅λλ€.
μ΄ λ μλΈ μμ€ν
μ λͺ¨λ μ¬μ©νλ μ£Ό μμ© νλ‘κ·Έλ¨μ μμ±ν λ
μ£Ό μμ© νλ‘κ·Έλ¨μ myApp-dataSourceλΌλ μ΄λ¦μΌλ‘ DataSourceλ₯Ό μ°Έμ‘°ν©λλ€.
μΈ κ°μ μ΄λ¦ λͺ¨λκ° MyApp κ΅¬μ± λ©ν λ°μ΄ν°μ μΆκ°νλ λμΌν κ°μ²΄λ₯Ό μ°Έμ‘°νκ²νλ €λ©΄ λ€μ λ³μΉ μ μλ₯Ό μ¬μ©ν©λλ€.
<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />
μ΄μ κ° κ΅¬μ± μμμ κΈ°λ³Έ μμ© νλ‘κ·Έλ¨μ κ³ μ νκ³ λ€λ₯Έ μ μμ μΆ©λνμ§ μλλ‘ λ³΄μ₯ λ
μ΄λ¦μ μ¬μ©νμ¬ dataSourceλ₯Ό μ°Έμ‘° ν μ μμ§λ§ μ€μ λ‘ λμΌν beanμ μ°Έμ‘°ν©λλ€.
μλ° μ€μ μ μ¬μ©νκ³ μλ€λ©΄, @Bean μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ λ³λͺ
μ μ 곡 ν μ μμ΅λλ€.
μμΈν λ΄μ©μ @Bean μ΄λ
Έν
μ΄μ
μ¬μ©νκΈ°λ₯Ό μ°Έμ‘°νμμμ€.
beanμΈμ€ν΄μ€ν
bean μ μλ λ³Έμ§μ μΌλ‘ νλ μ΄μμ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ
λλ€.
컨ν
μ΄λλ λ¬Όμ λ λͺ
λͺ
λ beanμ λν λ μνΌλ₯Όλ³΄κ³ ,
κ·Έ bean μ μλ‘ μΊ‘μν λ μ€μ λ©ν λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μ€μ κ°μ²΄λ₯Ό μμ± (λλ νλ)ν©λλ€.
XML κΈ°λ° κ΅¬μ± λ©ν λ°μ΄ν°λ₯Ό μ¬μ©νλ κ²½μ° <bean />
μμμ class μμ±μμ μΈμ€ν΄μ€ν ν κ°μ²΄μ μ ν (λλ ν΄λμ€)μ μ§μ ν©λλ€.
λ΄λΆμ μΌλ‘ BeanDefinition μΈμ€ν΄μ€μ Class μμ± μΈμ΄ ν΄λμ€ μμ±μ λκ° νμμ
λλ€.
(μμΈμ λν΄μλ μΈμ€ν΄μ€ ν©ν 리 λ©μλ λ° Bean μ μ μμμ μ¬μ©νμ¬ μΈμ€ν΄μ€νλ₯Ό μ°Έμ‘°νμμμ€.)
λ€μ λ κ°μ§ λ°©λ² μ€ νλλ‘ Class μμ±μ μ¬μ©ν©λλ€.
- μΌλ°μ μΌλ‘ 컨ν
μ΄λ μμ²΄κ° ν΄λΉ μμ±μλ₯Ό λ°μνμ¬ beanμ μ§μ μμ±νλ κ²½μ°μ
μμ± λ bean ν΄λμ€λ₯Ό μ§μ νλ κ²μ new μ°μ°μλ₯Ό μ¬μ©νλ Java μ½λμ λ€μ λμΌν©λλ€. - λλ¬Έ κ²½μ°μ΄μ§λ§ 컨ν
μ΄λκ° λΉμ μμ±νκΈ° μν΄ ν΄λμ€μ μ μ ν©ν 리 λ©μλλ₯Ό νΈμΆνλ κ²½μ°,
κ°μ²΄λ₯Ό μμ±νκΈ° μν΄ νΈμΆ λ μ μ ν©ν 리 λ©μλλ₯Ό ν¬ν¨νλ μ€μ ν΄λμ€λ₯Ό μ§μ ν©λλ€.
static ν©ν 리 λ©μλμ νΈμΆλ‘λΆν° λλ € μ£Όμ΄μ§ μ€λΈμ νΈ νμ, κ°μ ν΄λμ€ λλ λ€λ₯Έ ν΄λμ€ μΌ κ°λ₯μ±μ΄ μμ΅λλ€.
com.example ν¨ν€μ§μ FooλΌλ ν΄λμ€κ° μκ³
μ΄ Foo ν΄λμ€μ BarλΌλ μ μ μ€μ²© ν΄λμ€κ°μλ κ²½μ° Bean μ μμ 'class'μμ± κ°μ λ€μκ³Ό κ°μ΅λλ€.
com.example.Foo$Bar
μ΄λ¦μ $ λ¬Έμλ₯Ό μ¬μ©νμ¬ μ€μ²© ν΄λμ€ μ΄λ¦μ μΈλΆ ν΄λμ€ μ΄λ¦κ³Ό ꡬλΆν©λλ€.
μμ±μλ‘ μΈμ€ν΄μ€ν νκΈ°
μμ±μ μ κ·Όλ²μΌλ‘ λΉμ μμ±νλ©΄, λͺ¨λ μΌλ° ν΄λμ€λ Springμ μν΄ μ¬μ© κ°λ₯νκ³ νΈνμ΄ κ°λ₯νλ€.
μ¦, κ°λ°μ€μΈ ν΄λμ€λ νΉμ μΈν°νμ΄μ€λ₯Ό ꡬννκ±°λ νΉμ λ°©μμΌλ‘ μ½λ© ν νμκ° μμ΅λλ€.
κ°λ¨ν bean ν΄λμ€λ₯Ό μ§μ νλ©΄ μΆ©λΆν©λλ€.
κ·Έλ¬λ νΉμ beanμ λν΄ μ¬μ©νλ IoC μ νμ λ°λΌ κΈ°λ³Έ (λΉμ΄μλ) μμ±μκ° νμν μ μμ΅λλ€.
Spring IoC 컨ν
μ΄λλ κ΄λ¦¬νκ³ μνλ ν΄λμ€λ₯Ό μ¬μ€μ κ΄λ¦¬ ν μμλ€.
μ§μ ν JavaBeans κ΄λ¦¬μ κ΅νλμ§ μμ΅λλ€.
λλΆλΆμ Spring μ¬μ©μλ κΈ°λ³Έ (μΈμ μμ) μμ±μμ μ μ ν setter λ° getterλ₯Ό
컨ν
μ΄λμ μμ± λ€μμ λͺ¨λΈλ§ ν μ€μ JavaBeansλ₯Ό μ νΈν©λλ€.
컨ν
μ΄λμ λ λ§μ non-bean-style ν΄λμ€λ₯Ό κ°μ§ μλ μμ΅λλ€.
μλ₯Ό λ€μ΄, μ λμ μΌλ‘ JavaBean μ€νμ λ°λ₯΄μ§ μλ λ κ±°μ μ°κ²° νμ μ¬μ©ν΄μΌνλ κ²½μ°,
Springλμ΄λ₯Ό κ΄λ¦¬ ν μ μμ΅λλ€.
XML κΈ°λ° κ΅¬μ± λ©ν λ°μ΄ν°λ₯Ό μ¬μ©νλ©΄ λ€μκ³Ό κ°μ΄ Bean ν΄λμ€λ₯Ό μ§μ ν μ μμ΅λλ€.
<bean id="exampleBean" class="examples.ExampleBean"/>
<bean name="anotherExample" class="examples.ExampleBeanTwo"/>
μμ±μμ μΈμλ₯Ό μ 곡νλ λ©μ»€λμ¦ (νμν κ²½μ°) λ° κ°μ²΄κ° μμ± λ νμ
κ°μ²΄ μΈμ€ν΄μ€ μμ±μ μ€μ νλ λ°©λ²μ λν μμΈν λ΄μ©μ Injection Dependenciesλ₯Ό μ°Έμ‘°νμμμ€.
μ μ ν©ν 리 λ©μλλ‘ μΈμ€ν΄μ€ννκΈ°
μ μ ν©ν 리 λ©μλλ‘ μμ±ν beanμ μ μ ν λ,
class μμ±μ μ¬μ©νμ¬ μ μ ν©ν 리 λ©μλλ₯Ό ν¬ν¨νλ ν΄λμ€λ₯Ό μ§μ νκ³
factory-methodλΌλ μμ±μ μ¬μ©νμ¬ ν©ν 리 λ©μλ μ체μ μ΄λ¦μ μ§μ νμμμ€.
μ΄ λ©μλλ₯Ό νΈμΆνκ³ (λμ€μ μ€λͺ
λ μ νμ μΈμ μ¬μ©) λΌμ΄λΈ κ°μ²΄λ₯Ό λ°ν ν μ μμ΄μΌν©λλ€.
μ΄ κ°μ²΄λ μ΄ν μμ±μλ₯Ό ν΅ν΄ λ§λ€μ΄μ§ κ²μ²λΌ μ·¨κΈλ©λλ€.
κ·Έλ¬ν bean μ μλ₯Ό μ¬μ©νλ ν κ°μ§λ λ κ±°μ μ½λμμ μ μ ν©ν 리λ₯Ό νΈμΆνλ κ²μ
λλ€.
λ€μ bean μ μλ factory-methodλ₯Ό νΈμΆνμ¬ beanμ μμ±νλλ‘ μ§μ ν©λλ€.
μ΄ μ μλ λ°ν λ κ°μ²΄μ μ ν (ν΄λμ€)μ μ§μ νμ§ μμΌλ©° factory λ©μλλ₯Ό ν¬ν¨νλ ν΄λμ€ λ§ μ§μ ν©λλ€.
μ΄ μμ μμ createInstance () λ©μλλ μ μ λ©μλ μ¬μΌν©λλ€.
<bean id="clientService"
class="examples.ClientService"
factory-method="createInstance"/>
public class ClientService {
private static ClientService clientService = new ClientService();
private ClientService() {}
public static ClientService createInstance() {
return clientService;
}
}
ν©ν 리 λ©μλμ μΈμ (μ νμ )λ₯Ό μ 곡νκ³ ν©ν 리μμ μ€λΈμ νΈκ° λ¦¬ν΄ λ ν
μ€λΈμ νΈ μΈμ€ν΄μ€ λ±λ‘ μ 보λ₯Ό μ€μ νλ λ©μ»€λμ¦μ λν μμΈν λ΄μ©μ μ’
μμ± λ° κ΅¬μ±μ μ°Έμ‘°νμμμ€.
μΈμ€ν΄μ€ ν©ν 리 λ©μλλ₯Ό μ¬μ©ν μΈμ€ν΄μ€ν
μ μ ν©ν 리 λ©μλλ₯Ό ν΅ν μΈμ€ν΄μ€νμ μ μ¬νκ², μΈμ€ν΄μ€ ν©ν 리 λ©μλλ₯Ό μ¬μ©ν μΈμ€ν΄μ€νλ
컨ν
μ΄λμμ κΈ°μ‘΄ λΉμ λΉ μ μ λ©μλλ₯Ό νΈμΆνμ¬ μ λΉμ μμ±ν©λλ€.
μ΄ λ©μ»€λμ¦μ μ¬μ©νλ €λ©΄ class μμ±μ 곡백μΌλ‘λκ³ factory-bean μμ±μμ
κ°μ²΄λ₯Ό μμ±νκΈ° μν΄ νΈμΆ ν μΈμ€ν΄μ€ λ©μλκ° ν¬ν¨ λ νμ¬ (λλ μμ / μ‘°μ) 컨ν
μ΄λμμ beanμ μ΄λ¦μ μ§μ νμμμ€.
ν©ν 리 λ©μλ μ체μ μ΄λ¦μ factory-method μμ±μΌλ‘ μ€μ νμμμ€.
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
<!-- inject any dependencies required by this locator bean -->
</bean>
<!-- the bean to be created via the factory bean -->
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
public class DefaultServiceLocator {
private static ClientService clientService = new ClientServiceImpl();
public ClientService createClientServiceInstance() {
return clientService;
}
}
νλμ ν©ν 리 ν΄λμ€λ λ€μκ³Ό κ°μ΄ νλ μ΄μμ ν©ν 리 λ©μλλ₯Ό κ°μ§ μ μμ΅λλ€.
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
<!-- inject any dependencies required by this locator bean -->
</bean>
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
<bean id="accountService"
factory-bean="serviceLocator"
factory-method="createAccountServiceInstance"/>
public class DefaultServiceLocator {
private static ClientService clientService = new ClientServiceImpl();
private static AccountService accountService = new AccountServiceImpl();
public ClientService createClientServiceInstance() {
return clientService;
}
public AccountService createAccountServiceInstance() {
return accountService;
}
}
μ΄ μ κ·Όλ²μ factory bean μμ²΄κ° μμ‘΄μ± μ£Όμ
(DI)μ ν΅ν΄ κ΄λ¦¬λκ³ κ΅¬μ± λ μ μμμ 보μ¬μ€λλ€.
factory beanμ μΈμ€ν΄μ€ λλ μ μ ν©ν 리 λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ± ν Spring 컨ν
μ΄λμ ꡬμ±λ beanμ μ°Έμ‘°ν©λλ€.
λ°λλ‘, FactoryBean (λλ¬Έμ μ¬μ©μμ£Όμ)μ Spring κ΄λ ¨ FactoryBeanμ μ°Έμ‘°ν©λλ€.