티스토리 뷰
지금까지 스프링컨테이너와 Bean객체를 생성할 때 xml 파일을 생성한 뒤 Bean태그를 이용했다. xml 파일을 설정하지 않고도, 어노테이션을 활용해 Java파일에서 스프링컨테이너를 생성하는 과정을 알아본다.
xml에서 Java클래스 변환을 알아보면서 다음과 같은 주제를 다룬다.
- xml > Java로 변환
- DB 모델의 property
- List와 Map 타입의 변수
- 스프링컨테이너 생성
■ 스프링 설정파일.xml > Java로 변환
MemberConfig.java
@Configuration
public class MemberConfig {
}
xml파일 대신 컨테이너로 사용할 Java 클래스에 @Configuration 어노테이션을 선언해줌으로, MemberConfig 클래스는 스프링설정파일로써, 스프링 컨테이너를 생성할 수 있게 되었다.
applicationContext.xml
<bean id="studentDao" class="ems.member.dao.StudentDao" />
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
MemberConfig.java로 변환
@Configuration
public class MemberConfig {
@Bean
//<bean id="studentDao" class="ems.member.dao.StudentDao" />
public StudentDao studentDao() {
return new StudentDao();
}
@Bean
//<bean id="registerService" class="ems.member.service.StudentRegisterService">
public StudentRegisterService registerService() {
//<constructor-arg ref="studentDao" />
return new StudentRegisterService(studentDao());
}
xml 상에 id는 메소드명으로, class는 반환타입으로 메소드를 지정해주면 된다. @Bean 어노테이션은 해당 메소드가 Bean 객체를 생성할 수 있도록 해준다.
만약 생성자 주입이 지정되어있다면 constructor-arg 태그의 ref 속성 값에 있던 bean과 동일한 studentDao를 생성자 매개변수로 넣어준다.
■ DB 모델의 property 변환
DataBaseConnectionInfo.java
public class DataBaseConnectionInfo {
private String jdbcUrl;
private String userId;
private String userPw;
//getter, setter 생략
}
applicationContext.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>
DB Model 과 스프링설정파일의 일부이다. DB연동을 위해 필요한 jdbcUrl과 아이디, 패스워드를 가지며 xml파일을 이용해 의존성 주입했을 때의 예제이다. (실제로 DB와 연결하진 않았다)
MemberConfig.java로 변환
@Bean
public DataBaseConnectionInfo dataBaseConnectionInfoDev() {
DataBaseConnectionInfo infoDev = new DataBaseConnectionInfo();
infoDev.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
infoDev.setUserId("scott");
infoDev.setUserPw("tiger");
return infoDev;
}
DB객체를 생성해준 뒤 setter를 이용해 xml에 있던 value 값을 넣어주면 된다.
■ List와 Map 타입의 변수 설정
EMSInformationService.java
public class EMSInformationService {
private List<String> developers;
private Map<String, String> administrators;
private Map<String, DataBaseConnectionInfo> dbInfos;
}
- List<String> 타입
applicationContext.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>
MemberConfig.java로 변환
@Bean
public EMSInformationService informationService() {
EMSInformationService info = new EMSInformationService();
ArrayList<String> developers = new ArrayList<String>();
developers.add("Cheney.");
developers.add("Eloy.");
developers.add("Jasper.");
developers.add("Dillon.");
developers.add("Kian.");
info.setDevelopers(developers);
//private Map<String, String> 타입 변환
//private Map<String, DataBaseConnectionInfo> 타입 변환
return info;
}
- Map<String, String> 타입
applicationContext.xml
<property name="administrators">
<map>
<entry>
<key>
<value>Cheney</value>
</key>
<value>cheney@springPjt.org</value>
</entry>
</map>
</property>
MemberConfig.java로 변환
Map<String, String> administrators = new HashMap<String, String>();
administrators.put("Cheney", "cheney@springPjt.org");
info.setAdministrators(administrators);
- private Map<String, DataBaseConnectionInfo> 타입
applicationContext.xml
<property name="dbInfos">
<map>
<entry>
<key>
<value>dev</value>
</key>
<ref bean="dataBaseConnectionInfoDev"/>
</entry>
</map>
</property>
MemberConfig.java로 변환
Map<String, DataBaseConnectionInfo> dbInfos = new HashMap<String, DataBaseConnectionInfo>();
dbInfos.put("dev", dataBaseConnectionInfoDev());
info.setDbInfos(dbInfos);
■ 스프링컨테이너 생성
Main.java
//스프링컨테이너가 .xml일 때
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
//스프링컨테이너가 .java일 때
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MemberConfig.class);
//java 스프링컨테이너가 여러개일 때
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(MemberConfig1.class, MemberConfig2.class, MemberConfig3.class);
Main클래스에서 스프링컨테이너를 불러오는 방법도 변경된다. 컨테이너가 xml혹은 java일때 상황에 맞춰 다른 클래스를 이용해 객체를 생성해주면 된다.
Java 파일 컨테이너 또한 xml과 같이 여러 파일로 나눌 수 있다. 그럴 땐 인자값으로 사용할 클래스를 모두 입력해주면 된다. 혹은 하나의 Java파일에 다른 설정파일들을 @import 해줌으로써 import에 포함된 다른 클래스들을 인자에서 제외할 수도 있다.
MemberConfig1 클래스에 다른 설정파일들을 import하는 코드
@Configuration
@Import({MemberConfig2.class, MemberConfig3.class})
public class MemberConfig1 {
}
출처 : [인프런] 자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
'Programming > Spring' 카테고리의 다른 글
스프링 커맨드 객체를 통해 단순반복코드 줄이기 (0) | 2022.04.10 |
---|---|
스프링 MVC 패턴과 DispatcherServlet (0) | 2022.04.02 |
스프링 컨테이너와 Bean객체의 생명주기 (0) | 2022.03.19 |
스프링 DI Annotation - @Autowired, @Inject 정리 (0) | 2022.03.18 |
스프링 의존객체 선택 (0) | 2022.03.17 |
- Total
- Today
- Yesterday
- 스프링
- CSS
- C
- JSP
- 스프링부트
- 넥사크로
- SQL
- 프로그래머스
- C++
- 인턴
- Java
- 이클립스
- svn
- 환경설정
- Open API
- JVM
- 네트워크
- Thymeleaf
- HeidiSQL
- 부트스트랩
- CS
- 개발용어
- 오류
- 백준
- 국비교육
- 오라클
- 데이터베이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |