티스토리 뷰


Spring framework에서 중요한 핵심 개념인 DI(Dependence injection)에 대한 이해를 돕고자, 

Xml설정 파일을 이용해서 Spring Container(ClassPathXmlApplicationContext.class)에 

Bean객체를 등록하는 예제입니다.



User.java

@Component

public class User {


private Long no;

private String name;

@Autowired

private Friend friend;

private List<String> friends;


public User() {

no = 1L;

name = "루피";

}


public User(Long no, String name) {

this.no = no;

this.name = name;

}


public Long getNo() {

return no;

}


public void setNo(Long no) {

this.no = no;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


public Friend getFriend() {

return friend;

}


public void setFriend(Friend friend) {

this.friend = friend;

}


public List<String> getFriends() {

return friends;

}


public void setFriends(List<String> friends) {

this.friends = friends;

}


@Override

public String toString() {

return "User [no=" + no + ", name=" + name + ", friend=" + friend + ", friends=" + friends + "]";

}

}


Friend.java

public class Friend {


private String name;


public Friend(String name) {

this.name = name;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


@Override

public String toString() {

return "Friend [name=" + name + "]";

}

}


ContainerTest.xml

<!-- 기본생성자를 Bean으로 등록 -->

<bean id = "user1" class = "kr.co.itcen.springcontainer.user.User" />

<bean id = "user2" name="usr2" class = "kr.co.itcen.springcontainer.user.User" />


<bean id = "user3" class = "kr.co.itcen.springcontainer.user.User" >

<constructor-arg index = "0" value = "1"/>

<constructor-arg index = "1" value = "스펀지밥"/>

<!-- <constructor-arg value = "스펀지밥"/> -->

</bean>


<!-- property설정으로 인자 값을 넣어주려면 해당 객체에 관련 Setter가 있어야 한다. -->

<bean id="user4" class="kr.co.itcen.springcontainer.user.User">

<property name="no" value="4"/>

<property name="name" value="조로"/>

</bean>


<bean id = "user5" class = "kr.co.itcen.springcontainer.user.User" >

<property name="no" value="5"></property>

<property name="name" value="둘리"></property>


<!-- DI -->

<property name="friend" ref="friend1"/>

</bean>


<bean id="friend1" class="kr.co.itcen.springcontainer.user.Friend">

<constructor-arg value="로드 존슨"/>

</bean>


<bean id="user6" class="kr.co.itcen.springcontainer.user.User">

<property name="no" value="6"/>

<property name="name" value="쵸파"/>


<!-- DI라기보다는 객체를 생성해서 집어넣은 것.. -->

<property name="friend" >

<bean class="kr.co.itcen.springcontainer.user.Friend">

<constructor-arg value = "마이콜"/>

</bean>

</property>


<property name="friends">

<list>

<value>아이언맨</value>

<value>캡틴 아메리카</value>

<value>스파이더맨</value>

<value>토르</value>

</list>

</property>

</bean>


ContainerTest.java

ClassPathXmlApplicationContext클래스는 Xml파일만 인식가능한 컨테이너로써, java config로 설정을하기위해서는 다른 컨테이너를 사용해야합니다. ApplicationContext는 컨테이너를 사용하기위한 인터페이스.


public class ContainerTest {


public static void main(String[] args) {

testApplicationContext();

}


public static void testApplicationContext() {


ApplicationContext appCtxt = new ClassPathXmlApplicationContext("config/user/applicationContext01.xml");


// id로 가져오기, id로만 명시했기 때문에 getBean이 어떤 형태인지 모름. 따라서 캐스팅을 해줘야 한다.

User user1 = (User)appCtxt.getBean("user1");

System.out.println(user1);


// name으로 가져오기.

User usr2 = (User)appCtxt.getBean("usr2");

System.out.println(usr2);


// Singleton 확인.

User user2 = (User)appCtxt.getBean("user2");

System.out.println(usr2 == user2);


// User(Long, String) 으로 생성된 빈 가져오기.

User user3 = (User)appCtxt.getBean("user3");

System.out.println(user3);


// User() 으로 생성되고 프로퍼티 세팅을 한(setter) 빈 가져오기.

User user4 = (User)appCtxt.getBean( "user4" );

System.out.println(user4);


// DI 설정한 빈 가져오기.

User user5 = (User)appCtxt.getBean( "user5" );

System.out.println(user5);


// DI 설정한 빈 가져오기 2.

User user6 = (User)appCtxt.getBean( "user6" );

System.out.println(user6);


((ConfigurableApplicationContext)appCtxt).close();

}

}



이클립스 Spring Container running



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