ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java SpringFramework - DI(DependencyInjection)
    Search: Spring Spring 2020. 7. 3. 11:06

     

    의존 관계, 의존성 주입 이해

    클래스 'A -> B'의 구조에 대한 다양한 표현.
    A는 B를 포함한다.
    A는 B에 의존한다.
    강한의존 관계다.
    등이 될 수 있다.

    interface와 inherit를 통하여 의존 관계를 줄일 수 있다.

    클래스 'IB <I- B, A -> IB'의 구조일 경우
    A외부에서 B를 생성하고 IB를 A에 넘길 경우(의존성 주입)
    A는 B에 직접적으로 의존하지 않게 될 수 있다.

     

     

    외부에서 Obj생성(기본생성자)

    소스코드에서 직접 Obj생성(하드코딩)을 하지 않고 외부에 할 수 있도록 하는 것.

    외부 생성 방법: XML로 설정 값을 빼기.

    <!-- setting.xml -->
    <!-- xml head 생략 (springframework관련 xml선언 참조 내용들, 보통 툴로 자동 생성) -->
    <!-- -->
    
    <been id="인스턴스이름1" class="클래스이름1"/>
    <been id="인스턴스이름2" class="클래스이름2">
    	<!-- 클래스이름2에 있는 함수setInstanceobj(인스턴스이름1)를 호출하여 대입하기 -->
    	<property name="instanceobj", ref="인스턴스이름1"/>
        <!-- 클래스이름2에 있는 함수setIntvalue(100)를 호출하여 값 입력하기 -->
        <property name="intvalue", value="100"/>
    </been>

     

    Xml이 있는 곳에 따라 맞는 생성자를 선택한다.
    ApplicationContext c = new ClassPathXmlApplicationContext("setting.xml")
    //ApplicationContext c = new FileSystemXmlApplicationContext("setting.xml")
    //ApplicationContext c = new XmlWebXmlApplicationContext("setting.xml")
    //ApplicationContext c = new AnnotationConfigApplicationContext("setting.xml")
    
    //방법1 - 인스턴스 명으로 얻기
    클래스이름2 co1 = (클래스이름2)c.getBeen("인스턴스이름2") //캐스팅 필요
    //방법2 - 클래스 자료형으로 얻기
    클래스이름2 co2 = c.getBeen(클래스이름2.class)
    

     

     

    외부에서 Obj생성(생성자 값 지정)

    java 클래스

    public class 클래스이름3 {
    	public 클래스이름3(int test1, float test2) {
        }
    }

    위 클래스를 생성하며 생성자에 값을 넣기 위한 xml 설정, 2가지 방법

    방법1

    <been id="인스턴스이름3" class="클래스이름3">
    	<!-- type은 생략 가능 -->
    	<constructor-arg index="0" type="int" value="111"/>
    	<constructor-arg index="1" type="float" value="222"/>
    </been>

    방법2

    ...
    xml파일 앞에 p라는 namespace추가 선언 필요
    xmlns:p="http://www.springframework.org/schema/p"
    ...
    
    <been id="인스턴스이름3" class="클래스이름3" p:test1="111" p:test2="222" />

     

    외부에서 Obj값 넣기

    위 예제에서 "<property name="intvalue", value="100"/>"부분 참고

     

    'Spring' 카테고리의 다른 글

    spring.jpa.hibernate.hbm2ddl.auto  (0) 2022.09.26
    Springboot에 H2 database 사용  (0) 2022.09.26
    Springboot Mustache 준비  (0) 2022.09.25
    Springboot html 만들기  (0) 2022.09.25
    Springboot server port 변경  (0) 2022.09.25
    Vsc Spring Boot 사용 준비  (0) 2022.08.06
    Java SpringFramework - MVC  (0) 2020.07.03
    Java SpringFramework - AOP  (0) 2020.07.03

    댓글