본문 바로가기
Programming/Spring

[spring] DI 관련 Source 내용

by NAMP 2016. 4. 20.

[spring] DI 관련 Source 내용

스프링은 객체를 관리한다.
객체를 관리하는 역할을 스프링에 맡긴다.
jar 기반으로 배포된다.
스프링을 사용하기 이전에 스프링이 관리할 클래스를 잘 디자인 해야 한다.
context 이므로 환경설정 파일이 필요하다.

<?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="jdbc" class="user.dao.UserDAO_JDBC"></bean>
    <bean id="spring" class="user.dao.UserDAO_Spring"></bean>
    <bean id="ibatis" class="user.dao.UserDAO_iBatis"></bean>
    <bean id="mybatis" class="user.dao.UserDAO_MyBatis"></bean>
    
    <bean id="service" class="user.service.UserServiceImpl"></bean>
</beans>

applicationContext.xml 파일을 생성한다.

public static void main(String[] args) {
    String[] config = {"applicationContext.xml"};
    ApplicationContext context = new ClassPathXmlApplicationContext(config);
}

스프링안에 설정한 다섯개의 객체가 메모리에 올라가 있다.

UserService userService = (UserService) context.getBean("service");

리턴 타입이 object 이므로 캐스팅이 필요하다.

<bean id="service" class="user.service.UserServiceImpl">
    <constructor-arg ref="jdbc"/>
</bean>

생성자 주입을 한다.

    <bean id="service" class="user.service.UserServiceImpl">
        <constructor-arg ref="jdbc"/>
        <property name="dao" ref="spring"/>
    </bean>

setter 메소드 주입을 한다.

위의 코드는 아래 자바 코드와 역할이 같다.

UserDAO jdbc = new UserDAO_JDBC();
UserDAO spring = new UserDAO_Spring();

UserService service = new UserServiceImpl(jdbc);
((UserServiceImpl)service).setDao(spring);

bean 생성

<bean id="user" class="user.vo.UserVO"/>

user 객체를 출력한다.

String[] config = {"applicationContext.xml"};
ApplicationContext context = new ClassPathXmlApplicationContext(config);
        
UserVO vo = (UserVO) context.getBean("user");
System.out.println(vo);

실행결과

UserVO [userid=null, username=null, userpwd=null, email=null, phone=null, address=null]

값을 설정한다. 생성자에 값을 전달한다.

    <bean id="user" class="user.vo.UserVO">
        <constructor-arg value="1" />
        <constructor-arg value="2" />
        <constructor-arg value="3" />
        <constructor-arg value="4" />
        <constructor-arg value="5" />
        <constructor-arg value="6" />
    </bean>

실행결과

UserVO [userid=1, username=2, userpwd=3, email=4, phone=5, address=6]

Namespaces

namespace

p

namespaces 탭에서 p 체크박스를 체크한다.

체크를 하면 p 어트리뷰트가 활성화됨

    <bean id="user" class="user.vo.UserVO" 
        p:userid="java01" p:phone="010"
        p:username="홍길동" p:email="email">
    </bean>

실행결과

UserVO [userid=java01, username=홍길동, userpwd=null, email=email, phone=010, address=null]


'Programming > Spring' 카테고리의 다른 글

[spring] AOP (Aspect Oriented Programming)  (0) 2016.04.21
[spring] Annotation 기반 설정  (0) 2016.04.20
[spring] 데이터베이스 연동  (0) 2016.04.19
[spring] DI(Dependency Inversion) 개념  (0) 2016.04.19
[Spring] 설정 파일  (0) 2016.04.18

댓글