매일 조금씩

01/25 ! - Spring(2) : DI(Dependency Inject)의 2가지 형태 bean configuration file(xml)과 annotation 본문

빅데이터 플랫폼 구축을 위한 자바 개발자 양성과정

01/25 ! - Spring(2) : DI(Dependency Inject)의 2가지 형태 bean configuration file(xml)과 annotation

mezo 2021. 2. 25. 19:58
728x90
반응형

Java

         Java ..  객체지향 -> 패턴

                                       효율 - enterprise (대용량, 분산, 분업)

                => 아키텍처

 

                동영상 - 정리

                             생활코딩

                             동빈나

 

                             신입 sw 인력을 위한 실전 자바 동영상

 

전자정부 프레임워크

         * 우리나라 공공기관 사용하는 기본 프레임워크(라이브러리)

           => open source

 

         eclipse ide

         * jsp => model2 => spring MVC

                                             DI

                                             AOP

                                          * tomcat / 다른것

                                          * 데이터베이스 / 다른것

                                          * Platform(OS) / 다른것

                                          + 업무

 

1. window program

          * 반응성

2. web program        (*)

3. mobile program

            mobile web  (*)   - jQuery web

            app

 


    현재 Maven 프로젝트로 Spring의 특징인 DI를 구현중이다.

Spring

 

1. 개발환경 

가장 중요한건 sts이다.

 

          STS - eclipse plug-in

                             - bean configuration file

                             - maven project

                      전자정부 프레임워크(jdk 14 버전 안돌아감)

                                https://www.egovframe.go.kr/

                                우리가 설치한 것들이 모두 여기에 포함되어 있다!

  

 

 

2. DI - Dependency Inject(의존 주입)

              객체 생성/초기화

                    1) new 생성자

                    2) setter

                    => spring

                         spring bean configuration file 설정

2-1. bean configuration file

 

 

 

1) 초기화를 태그 안에서 하기

p 속성 사용

> spring3 > com.exam.spring5

<bean id="to" class="com.exam.spring5.BoardTO" p:seq="1" p:subject="제목" />

이렇게 <bean> 안에 p 속성을 사용하여 초기화 할수 있다.

 

 

2) ArrayList 집어오기 - <list> 사용

> spring3 > com.exam.spring6 > AppEx02.java

BoardListTO 를 만들었는데 이에 관한걸 bean configuration file로 초기화 해줄 수 있다.

   1. ArrayList<String> 초기화, 가져오기

<bean id="listTO" class="com.exam.spring6.BoardListTO" scope="prototype">
    <property name="userLists">
        <list>
            <value>홍길동</value>
            <value>박문수</value>
        </list>
    </property>
    <property name="boardLists">
        <list>
            <bean class="com.exam.spring6.BoardTO">
                <property name="seq" value="1" />
                <property name="subject" value="제목1" />
            </bean>
            <bean class="com.exam.spring6.BoardTO">
                <property name="seq" value="2" />
                <property name="subject" value="제목2" />
            </bean>
        </list>
    </property>
</bean>

 

   2. ArrayList<BoardTO> 초기화, 가져오기

<bean id="to1" class="com.exam.spring6.BoardTO" scope="prototype">
    <property name="seq" value="1" />
    <property name="subject" value="제목1" />
</bean>
<bean id="to2" class="com.exam.spring6.BoardTO" scope="prototype">
    <property name="seq" value="2" />
    <property name="subject" value="제목2" />
</bean>

<bean id="listTO" class="com.exam.spring6.BoardListTO" scope="prototype">
    <property name="userLists">
        <list>
            <value>홍길동</value>
            <value>박문수</value>
        </list>
    </property>
    <property name="boardLists">
        <list>
            <ref bean="to1" />
            <ref bean="to2" />
        </list>
    </property>
</bean>
	
for(BoardTO to: listTO.getBoardLists()) {
    System.out.println(to.getSeq());
    System.out.println(to.getSubject());
}

 

3) HashMap, Set 집어오기

> spring3 > com.exam.spring7 > AppEx02.java

<bean id="to1" class="com.exam.spring7.BoardTO" scope="prototype">
    <property name="seq" value="1" />
    <property name="subject" value="제목1" />
</bean>
<bean id="to2" class="com.exam.spring7.BoardTO" scope="prototype">
    <property name="seq" value="2" />
    <property name="subject" value="제목2" />
</bean>

<bean id="listTO" class="com.exam.spring7.BoardListTO">
    <property name="boardMaps">
        <map>
            <entry key="to1">
                <ref bean="to1"/>
            </entry>
            <entry key="to2">
                <ref bean="to2"/>
            </entry>
        </map>
    </property>
    <property name="boardSets">
        <set>
            <ref bean="to1" />
            <ref bean="to2" />
        </set>
    </property>
</bean>
package com.exam.spring7;

import org.springframework.context.support.GenericXmlApplicationContext;

import com.exam.spring7.BoardListTO;
import com.exam.spring7.BoardTO;

public class AppEx02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GenericXmlApplicationContext ctx
		= new GenericXmlApplicationContext("classpath:com/exam/spring7/context.xml");

		BoardListTO listTO = (BoardListTO)ctx.getBean("listTO");
		
		for(BoardTO to: listTO.getBoardMaps().values()) {
			System.out.println(to.getSeq());
			System.out.println(to.getSubject());
		}
		
		for(BoardTO to: listTO.getBoardSets()) {
			System.out.println(to.getSeq());
			System.out.println(to.getSubject());
		}
		
		ctx.close();
	}

}

 

4) Properties - 프로그램 환경설정

> spring3 > com.exam.spring8 > AppEx02.java

to를 Properties로 할 경우이다.

따로 BoardTO같은 to클래스를 생성할 필요가 없다. 

get,set이 내부적으로 정의 되어 있어서 바로 사용 가능하다. 

<bean id="client" class="com.exam.spring8.BookClient" scope="prototype">
    <property name="configs">
        <props>
            <prop key="server">127.0.0.1</prop>
            <prop key="connectionTimeout">5000</prop>
        </props>
    </property>
</bean>
package com.exam.spring8;

import java.util.Properties;

public class BookClient {
	private Properties configs;

	public Properties getConfigs() {
		return configs;
	}

	public void setConfigs(Properties configs) {
		this.configs = configs;
	}
	
}
package com.exam.spring8;

import java.util.Properties;

import org.springframework.context.support.GenericXmlApplicationContext;

import com.exam.spring8.BookClient;

public class AppEx02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GenericXmlApplicationContext ctx
		= new GenericXmlApplicationContext("classpath:com/exam/spring8/context.xml");

		BookClient client = (BookClient)ctx.getBean("client");
		Properties config = client.getConfigs();
		System.out.println(config.getProperty("server"));
		System.out.println(config.getProperty("connectionTimeout"));
	}

}

 

 

5) 인터페이스를 활용한 (model2 와 비슷한 형태로 만들기)

> spring4 > com.exam.spring4

BoardDAO, BoardAction은 인터페이스이다.

BoardDAO.java -> DatabaseBoardDAO.java

BoardAction.java -> InsertAcion.java

 

> spring4 > com.exam.spring4 > App.java

 

> spring4 > com.exam.spring4 > AppJava.java

bean configuration file 사용하지않고 Java 코드로만 만들기

 

+ jdbc 연결

> spring4 > com.exam.spring4 > MariadbBoardDAO.java

 

 

 

 

6) bean configuration file 없이 annotation으로 만들기

> spring5

bean configuration file인 context.xml을 대체하는 java 파일이 있다. 여기선 BeanConfig.java 이다.

@Configuration
@Scope("prototype")

을 클래스 위에 쓰고

 

@Bean 를 new를 return 하는 메서드 위에 쓴다.

@Bean 에서 name이라는 속성을 사용하여 뭘로 불릴지 정할수 있다.

 

생성자를 통한 주입, 프로퍼티를 통한 주입

 

 

 

7) 5번을 annotation으로 만들기

> spring4 > com.exam.spring4 > BeanConfig.java

> spring4 > com.exam.spring4 > AppAnno.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형