Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Tags
more
Archives
Today
Total
관리 메뉴

번개멍

[Spring]스프링의 이해? 본문

코딩이야기/Spring

[Spring]스프링의 이해?

번개멍 2020. 6. 25. 17:12

어노테이션? 

생성자와 메소드 차이

 

 

 

.IoC 컨테이너(역제어)
-Inversion of Control : 개발자가 코드 등의 흐름이나 객체 생성에 관련된 코드를 프로그래밍에 직접
작성하는 것이 아니라, 프레임워크가 사용하는 파일에 작성하여 이를 토대로 프레임워크가 객체를 성생하고,
반환하고, 코드가 동작하는 순서를 결정하는 것을 의미합니다

-객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권을 가진다.

-IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리합니다
-POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가지게 됩니다
-개발자들이 직접 POJO를 생성 할 수 있지만, 컨테이너에게 맡기빈다.(Bean등록 -> xml파일)

-2가지 표현
1.의존성 건색 : DL(일반적인 데이터 처리, DataBase 연결)

2.의존성 주입: DI => Setter Injection, Constructor Injection, method Injection
각 클래스간에 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 줍니다.

-종류
1)BeanFactory: 3.x주로 사용
-클래스를 통하여 객체를 생성하고, 이를 전달합니다
-상속 등 객체간의 관계를 형성하고 관리합니다.
-xmlBeanFactory

2)ApplicationContext
-클래스를 통하여 객체를 생성하고, 이를 전달합니다.
-상속 등 객체간의 관계를 형성하고 관리합니다
-국제화 지원 등 문자열에 대한 다양한 기능을 제공합니다
-리스너로 등록되어 있는 Bean에 이벤틀를 발생할 수 있다
-Bean에 관련한 성정을 위한 xml 파일은 즉시 로딩되어서 객체를 미리 생성하여 가지게 됩니다

-ClassPathXmlApplicationContext:xml
-FileSystemXmlApplicationContext
-xmlWebApplicationContext

Spring Bean 객체 생성하기
-spring에서는 사용할 Bean객체를 Bean configuration file에 정의하고, 필요할때마다
객체를 가져와서 사용합니다
-Bean태그: 사용할 Bean을 정의하는 태그
1)class: 객체를 생성하기 위하여 사용하는 클래스를 지정합니다(패키지명.클래스명)
2)id: Bean객체를 가져오기 위하여 사용하는 이름 지정합니다 (t1, t2 ...)
3)lazy-init: singleton인 경우에는 xml을 로딩할 때 객체생성 여부가 결정됩니다
      true: xml 로딩 시에 객체를 생성하지않고, 객체를 가져올 때 생성합니다
4)scope: 객체의 범위를 설정합니다.
   -singleton: 객체를 하나만 생성하여 사용합니다.
   -prototype: 객체를 가져올 때마다 객체를 생성합니다.

 

.DI(Dependency Injection)


1)베터리 일체형: ex) 베터리가 떨어지면 장난감을 새로 구입합니다
public class CarToy{
   private Battery battery;
   public CarToy(){
      battery = new NomalBattery();
   }
}
2)베터리 분리형: ex) 베터리가 떨어지면 베터리를 교체합니다
public class CarToy{
   private Battery battery;
   public CarToy(){
      
   }
   public void setBattery(Battery battery){
      this.battery = battery;
   }
}
2-1)의미적으로는 배터리가 떨어지면 배터리만 교체합니다.라는 의미이지만 약간의 차이가 있다.
public class CarToy{
   private Battery battery;
   public CarToy(){
      this.battery = battery;
   }
   public void setBattery(Battery battery){
      this.battery = battery;
   }
}

 

.DI 설정(생성자)

 public StudentRegisterService(StudentDao studentDao){

    this.studentDao = studentDao;

}

 

<bean id="studentDao" class="ezen.member.dao.studentDao/>

=>    <bean id="registerService" class="ezen.member.service.StudentRegisterService>

        <constructor-arg ref="studentDao"></constructor-arg>

        </bean>

 

 public StudentModifyService(StudentDao studentDao){

    this.studentDao = studentDao;

}

<bean id="studentDao" class="ezen.member.dao.studentDao/>

=>    <bean id="modifySerivce" class="ezen.member.service.StudentModifyService>

          <constructor-arg ref="studentDao"></constructor-arg>

          </bean>

 

 public StudentDeleteService(StudentDao studentDao){

    this.studentDao = studentDao;

}

<bean id="studentDao" class="ezen.member.dao.studentDao/>

=>   <bean id="deleteSerivce" class="ezen.member.service.StudentDeleteService>

        <constructor-arg ref="studentDao"></constructor-arg>

         </bean>

 

 

 public StudentSelectService(StudentDao studentDao){

    this.studentDao = studentDao;

}

 

=> <bean id="selectService" class="ezen.member.service.StudentSelectService>

        <constructor-arg ref="studentDao"></constructor-arg>

         </bean>

 

 

 

 public StudentAllSelectService(StudentDao studentDao){

    this.studentDao = studentDao;

}

 

=>  <bean id="AllSelectService" class="ezen.member.service.StudentAllSelectService>

        <constructor-arg ref="studentDao"></constructor-arg>

         </bean>

 

 

 

 

생성자 객체 주입


1. 의존성 주입은 스프링에서 아주 중요한 개념이며, 장점이 되는 부분입니다.

2. 빈(~.xml) 객체 생성할때, 빈 객체가 관리할 값이나 객체를 주입하는 것을 말합니다.

3. 빈 객체 생성 | 이후에는 빈 객체가 가질 기본적인 값을 자바 코드로 설정하는 것이 아니고, 빈을 정의 하는 xml 코드에서 정의하여 사용하는 것을 말합니다.

4. 빈을 정의할때 constructor-arg 태그를 이용하여 주입하면, 생성자를 통해 주입이 가능합니다.

[Sample 예제]

      <bean id ="t1" class ="kr.co.ezen.beans.TestBean">

          <constructor-arg value="100" type="int" index="2"/>

          <constructor-arg value="str" type="String" index="2"/>

          <constructor-arg value="100" type="int" index="2"/>

      </bean>

 

      <bean id="data" class="kr.co.ezen.beans.TestData" scope="prototype" />

      

      <bean id="t2" class="kr.co.ezen.beans.TestBean2">

      <constructor-arg ref="data" />

      <constructor-arg ref="data" />

      </bean>

 

 

 

 

 

 

5. 생성자 주입에는 다음과 같은 옵션이 존재합니다.

 - value : 기본 자료형 값과 문자열의 값을 설정합니다.

 - type : 저장할 데이터의 타입

 - ref : 객체를 설정

 - index : 지정된 값을 주입할 생성자의 매개변수의 인덱스 번호

 

 

 

 

 

 

'코딩이야기 > Spring' 카테고리의 다른 글

[Spring]AOP Interceptor  (0) 2020.07.10
[Spring]Execution  (0) 2020.07.06
[spring]AspectJ  (0) 2020.07.06
[Spring] 어노테이션 정리  (0) 2020.07.01
[Spring] 자동주입  (0) 2020.06.30
Comments