[Spring] ์คํ๋ง XML ์ค์ → ์ ๋ ธํ ์ด์ ์ค์ ๋ณํ ๋ฐฉ๋ฒ
์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉ์ XML ์ค์ ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์๋ฐ ์ ๋
ธํ
์ด์
๊ธฐ๋ฐ์ ์ค์ ์ ์ด์ฉํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค. (์ฐธ๊ณ - ์คํ๋ง XML ์ค์ ๋ฐฉ๋ฒ : [Spring] ์คํ๋ง XML ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ ์ ๋ฆฌ)
๋ณธ ๊ธ์์๋ ์คํ๋ง์ XML ์ค์ ์ ์ ๋
ธํ
์ด์
์ค์ ์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค.
๐ ๋ชฉ์ฐจ
1. ์คํ๋ง ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ค์ ๊ธฐ๋ณธ ํฌ๋งท
2. ๊ธฐ๋ณธ์ ์ธ ๋น ์ค์ ๋ฐฉ๋ฒ
- ์๋ ์ฃผ์ ์ค์ - autowire ์์ฑ
3. DI(Dependency Injection) ์ค์
- ์์ฑ์ ์ฃผ์
- ํ๋กํผํฐ ์ฃผ์
- ํ๋กํผํฐ ์ฃผ์ - List ํ์
- ํ๋กํผํฐ ์ฃผ์ - Map ํ์
4. ApplicationContext ๊ฐ์ฒด ์์ฑ
- Configuration ํด๋์ค๊ฐ ํ ๊ฐ์ธ ๊ฒฝ์ฐ
- Configuration ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ
- Configuration ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ(@Import ์ฌ์ฉ)
1. ์คํ๋ง ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ค์ ๊ธฐ๋ณธ ํฌ๋งท
import org.springframework.context.annotation.Configuration;
@Configuration
public class MemberConfig {
}
์์๋ณด๊ธฐ ์ฝ๋๋ก XXXConfig, XXXConfiguration ๊ฐ์ ์ด๋ฆ์ ํด๋์ค๋ฅผ ์์ฑํ๊ณ ํด๋์ค์ @Configuration ์ ๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
2. ๊ธฐ๋ณธ์ ์ธ ๋น ์ค์ ๋ฐฉ๋ฒ
XML ์ค์
<bean id="studentDao" class="ems.member.dao.StudentDao"></bean>
โฌ๏ธ
์ ๋ ธํ ์ด์ ์ค์
@Bean
public StudentDao studentDao() {
return new StudentDao();
}
๋ฉ์๋๋ช โก๏ธ studentDao โก๏ธ ๋น ์ด๋ฆ(id)
๋ฆฌํด ํ์ โก๏ธ StudentDao โก๏ธ ๋น ํ์
๋ฆฌํด ๊ฐ์ฒด โก๏ธ new StudentDao() โก๏ธ ๋น ๊ฐ์ฒด
๋น ์ค์ ์ ๋ ธํ ์ด์ (์ข:XML ์ค์ /์ฐ:์ ๋ ธํ ์ด์ ์ค์ )
- id="..." โก๏ธ @Bean(name="...")
- scope="prototype" โก๏ธ @Scope("prototype")
- primary=true โก๏ธ @Primary
- lazy-init=true โก๏ธ @Lazy
- init-method="..." โก๏ธ Bean(initMethod="...")
- destroy-method="..." โก๏ธ Bean(destroyMethod="...")
๋ฉ์๋ ์๊ท๋จผํธ๋ฅผ ํตํ ์ฃผ์
@Bean
public BasicDataSource source() {
BasicDataSource source = new BasicDataSource();
source.setDriverClassName("oracle.jdbc.OracleDriver");
source.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");
source.setUsername("scott");
source.setPassword("1234");
return source;
}
// ๋ฉ์๋ ์๊ท๋จผํธ ํ์
๊ณผ ๊ฐ์ ๋น์ด ์๋์ผ๋ก ์ฃผ์
๋๋ค.
@Bean
public JdbcTemplate db(BasicDataSource source) {
JdbcTemplate db = new JdbcTemplate(source);
return db;
}
๋น ๋ฑ๋ก ๋ฉ์๋์ ์ ์ธํ ์๊ท๋จผํธ์ ํ์ ์ด ๊ฐ์ ๋น์ด ์๋์ผ๋ก ์ฃผ์ ๋๋ค.
์๋ ์ฃผ์ ์ค์ - autowire ์์ฑ
๋น์ ์ด๋ฆ(id)์ด๋ ํ์ ์ ํตํด ์๋ ์ฃผ์ ํ๋ <bean>์ autowire ์์ฑ์ @Bean์ autowire ์์ฑ๊ณผ ๊ฐ๋ค.
๋จ, ์ด ๋ฐฉ๋ฒ์ ์คํ๋ง 5.1๋ถํฐ ์ ์ ๋์์ ํ์ง๋ง deprecated ๋์๋ค.
์ด๋ฆ(id) ์๋ ์ฃผ์ ๐
XML ์ค์
<bean id='data1' class='com.atoz_develop.beans.DataBean2'/>
<bean id='data2' class='com.atoz_develop.beans.DataBean2'/>
<bean id='xml3' class='com.atoz_develop.beans.TestBean2' autowire="byName"/>
โฌ๏ธ
์ ๋ ธํ ์ด์ ์ค์
@Bean
public DataBean2 data1() {
return new DataBean2();
}
@Bean
public DataBean2 data2() {
return new DataBean2();
}
// autowire: deprecated since 5.1
@Bean(autowire = Autowire.BY_NAME)
public TestBean2 java3() {
return new TestBean2();
}
ํ์ ์๋ ์ฃผ์ ๐
XML ์ค์
<!-- byType์ด๋ฏ๋ก id๋ ์ค์ ํ์ง ์์๋ ๋จ -->
<bean class='com.atoz_develop.beans.DataBean3'/>
<bean id='xml4' class='com.atoz_develop.beans.TestBean3' autowire="byType"/>
โฌ๏ธ
์ ๋ ธํ ์ด์ ์ค์
// BY_TYPE์ด๋ฏ๋ก ๋ฉ์๋ ์ด๋ฆ(๋น id)๋ ์์ ๋กญ๊ฒ ์ง์ ๊ฐ๋ฅ
@Bean
public DataBean3 data100() {
return new DataBean3();
}
@Bean(autowire = Autowire.BY_TYPE)
public TestBean3 java4() {
return new TestBean3();
}
3. DI(Dependency Injection) ์ค์
์์ฑ์ ์ฃผ์
XML ์ค์
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao"></constructor-arg>
</bean>
โฌ๏ธ
์ ๋ ธํ ์ด์ ์ค์
@Bean
public StudentModifyService modifyService() {
return new StudentModifyService(studentDao());
}
ํ๋กํผํฐ ์ฃผ์
XML ์ค์
<bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="userId" value="scott"/>
<property name="userPw" value="tiger"/>
</bean>
โฌ๏ธ
์ ๋ ธํ ์ด์ ์ค์
@Bean
public DataBaseConnectionInfo dataBaseConnectionInfoDev() {
DataBaseConnectionInfo infoDev = new DataBaseConnectionInfo();
infoDev.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
infoDev.setUserId("scott");
infoDev.setUserPw("tiger");
return infoDev;
}
ํ๋กํผํฐ ์ฃผ์ - List ํ์
XML ์ค์
<bean id="informationService" class="ems.member.service.EMSInformationService">
<property name="developers">
<list>
<value>Cheney.</value>
<value>Eloy.</value>
<value>Jasper.</value>
<value>Dillon.</value>
<value>Kian.</value>
</list>
</property>
</bean>
โฌ๏ธ
์ ๋ ธํ ์ด์ ์ค์
@Bean
public EMSInformationService informationService() {
EMSInformationService info = new EMSInformationService();
List<String> developers = new ArrayList<>();
developers.add("Cheney.");
developers.add("Eloy.");
developers.add("Jasper.");
developers.add("Dillon.");
developers.add("Kian.");
info.setDevelopers(developers);
return info;
}
ํ๋กํผํฐ ์ฃผ์ - Map ํ์
XML ์ค์
<bean id="informationService" class="ems.member.service.EMSInformationService">
<property name="administrators">
<map>
<entry>
<key>
<value>Cheney</value>
</key>
<value>cheney@springPjt.org</value>
</entry>
<entry>
<key>
<value>Jasper</value>
</key>
<value>jasper@springPjt.org</value>
</entry>
</map>
</property>
</bean>
โฌ๏ธ
์ ๋ ธํ ์ด์ ์ค์
@Bean
public EMSInformationService informationService() {
EMSInformationService info = new EMSInformationService();
Map<String, String> administrators = new HashMap<>();
administrators.put("Cheney", "cheney@springPjt.org");
administrators.put("Jasper", "jasper@springPjt.org");
info.setAdministrators(administrators);
return info;
}
4. ApplicationContext ๊ฐ์ฒด ์์ฑ
์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์คํ๋ง ์ค์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ApplicationContext(์คํ๋ง IoC ์ปจํ ์ด๋)์ ๊ตฌํ์ฒด๋ AnnotationConfigApplicationContext๋ฅผ ์ฌ์ฉํ๋ค.
Configuration ํด๋์ค๊ฐ ํ ๊ฐ์ธ ๊ฒฝ์ฐ
ApplicationContext context = new AnnotationConfigApplicationContext(MemberConfig.class);
Configuration ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ
ApplicationContext context = new AnnotationConfigApplicationContext(MemberConfig1.class, MemberConfig2.class, MemberConfig3.class);
Configuration ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ(@Import ์ฌ์ฉ)
์ ๋ ธํ ์ด์ ์ค์
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import({MemberConfig2.class, MemberConfig3.class})
public class MemberConfigImport {
}
@Configuration๊ณผ ํจ๊ป @Import๋ฅผ ์ฌ์ฉํด์ Importํ Configuration ํด๋์ค๋ฅผ ๋ช ์ํ๋ค.
ApplicationContext ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ์ Configuration ํด๋์ค๊ฐ ํ ๊ฐ์ธ ๊ฒฝ์ฐ์ ๋์ผํ๋ค.
๋๊ธ