티스토리 뷰

지금까지 스프링컨테이너와 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.) - 신입 프로그래머를 위한 강좌

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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 29 30 31
글 보관함