rhanziy

스프링 주요 특징 본문

Java

스프링 주요 특징

rhanziy 2022. 9. 5. 00:18
※ 스프링의 주요 특징
1. POJO기반의 구성(Plain Old Java Object)
2. 의존성 주입(DI: Dependency Injection)을 통한 객체간의 관계 구성
: 필요한 객체를 외부에서 밀어 넣는다.
3. AOP(Aspect Oriented Programming: 관점 지향 프로그래밍) 지원
: 횡단 관심사(반드시 필요한 기능)를 모듈로 분리하는 패턴프로그래밍이다.
4.MVC(Model-View-Controller)구조


의존성 주입 테스트
1. 레스토랑: 셰프 객체에 의존적이다. => 셰프 객체를 의존성 주입해야한다.
    생성자, setters메서드.
2. 셰프

pom.xml에 
// 기존에있는 junit 밑에 test를하기위한 외부객체 DI한당.
<dependency>
  <groupId>org.springframework</groupId> 
  <artifactId>spring-test</artifactId>
  <version>${org.springframework-version}</version>
</dependency>

@애너테이션을 이용해서
// 자동으로 외부주입 메서드를 생성 해주는 lombok필요함!, lombok.jar도 폴더에 넣어주기
<!-- Lombok -->
      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.22</version>
         <scope>provided</scope>
      </dependency>


Restaurant 클래스에 정의
package org.zerock.sample;

import org.springframework.beans.factory.annotation.Autowired;-> 자동주입객체
import org.springframework.stereotype.Component;

import lombok.Data;
import lombok.Setter;

@Component  // 스프링 코어에서 관리하는 객체임을 지정한다.
*@Data  // *Lombok관련 애너테이션(setters메서드, 생성자, toString()등을 자동 생성)
public class Restaurant {
	*@Setter(onMethod_ =@Autowired)
	private Chef chef;
	// Restaurant 객체는 Chef 객체를 필요로 한다.0+
	
	// onMethod_ 속성은 메서드에 추가할 애너테이션을 지정
	// @Autowired는 Chef 객체를 chef에 자동으로 주입
}

Chef 클래스에 정의
package org.zerock.sample;

import org.springframework.stereotype.Component;

import lombok.Data;

@Component
@Data
public class Chef {

	
}

테스트하려면 src/text/java에 main/java와 동일한 패키지를 생성해서
sampleTest.java 클래스 정의.

package org.zerock.sample;


import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.zerock.sample.Restaurant;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

>>>>import 오류나면 지우고 다시 import나 buildpath해준다.

@RunWith(SpringJUnit4ClassRunner.class)
// @RunWith는 테스트에 필요한 Runner클래스를 지정
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
// @ContextConfiguration은 스프링 빈을 등록하는 설정파일을 지정
@Log4j // 로그객체 생성(Logger)
// 오류가 발생하면 pom.xml에서 log4j의 <scope>runtime</scope>를 주석 처리 한다.
public class SampleTests {
  
  @Setter(onMethod_ = { @Autowired })
  private Restaurant restaurant;

  @Test   // 단위 테스트의 대상임을 지정, testExist() 실행하여 Junit 테스트 진행
  public void testExist() {
    
    assertNotNull(restaurant);
        // restaurant변수에 null이아니면 true를 반환한다.
    log.info(restaurant);
    log.info("----------------------------------");
    log.info(restaurant.getChef());
    
  }
  
  
}
Comments