Spring IoC(2) @Annotaion 종류 및 활용

Yeppi's 개발 일기·2022년 6월 5일
0

Spring&SpringBoot

목록 보기
3/16
post-custom-banner

1. 사용 이유

  • 자바코드가 단순해지는 대신, XML 소스 코드가 복잡해짐

  • 과도한 XML 설정 부담을 줄여줌




2. Component-Scan

1) @Componet

  • @Component
    • 사용할 클래스에 붙이기
    • LgTV
      @Component("tv")
      public class LgTV implements TV{ . . . }
  • applicationContext.xml에 context 사용
    • polymorphism 패키지의 모든 클래스를 스캔

      <!-- IoC설정에 Annotation을 적용하기 위한 설정 -->
      <context:component-scan base-package="polymorphism"/>
  • 출력결과
    ===> LgTV 생성
    LgTV---전원 키기
    LgTV---소리 올리기
    LgTV---소리 내리기
    LgTV---전원 끄기

👉

  • <bean class="polymorphism.SonySpeaker"/> 의 원래 아이디

    polymorphism.SonySpeaker#0

  • @Component

    → 클래스 이름의 첫 글자를 소문자로(lgTV)
    → 아이디를 자동으로 인식해줌

  • base-package

    → 해당 주소로 시작하는 모든 클래스를 스캔

  • <context:component-scan base-package="com.pastcampus.biz.user"/>

    • base-package로 지정한 패키지로 시작하는 모든 클래스를 스캔 범위에 포함시킴
    • com.pastcampus.biz, com.pastcampus.biz.user, com.pastcampus.biz.impl, com.pastcampus.biz.common


3. Dependency Injection 설정

1) @Autowired

Type Injection
해당 타입의 객체를 찾아 자동으로 할당, 가장 많이 사용

  • 참조변수 위에 @Autowired를 설정한 경우
    • 해당 타입의 객체가 반드시 메모리에 있어야 함
    • 유니크하게 존재해야만 함
  • 해당 참조 변수가 가리키는 객체 두개 다 @Component 일 경우
    • 전부 메모리에 올라가있으므로 Container는 찾지 못함
  • ex. 위에 해당되는 경우
    • LgTV 에서 Speak를 @Autowired
    • Speaker 를 implements 하는 AppleSpeak와 SonySpeak에서 @Component

📌예시📌

  • LgTV.java
    //@Component("tv")
    public class LgTV implements TV{
    	
    	@Autowired
    	// @Qualifier("apple")
    	private Speaker speaker;
    
    	. . .
    
    }
  • AppleSpeak와 SonySpeak의 @Component 는 지우기
  • xml 에 bean 등록
    <!-- 실제로 사용할 Speaker 하나만 등록한다 -->
    		<bean class="polymorphism.AppleSpeaker"></bean>
    		<bean id="tv" class="polymorphism.LgTV"></bean>
  • 출력결과
    ===> AppleSpeaker 생성
    ===> LgTV 생성
    LgTV---전원 키기
    AppleSpeaker---소리 올리기
    AppleSpeaker---소리 내리기
    LgTV---전원 끄기


2) @Qualifier

특정 객체 이름 이용하여 의존성 주입 시 사용

  • 의존성 주입 대상 객체에 두 개 이상일 때, error
  • 위와 동일하게 참조변수 위에 설정


3) @Inject

@Autowired 와 동일한 기능

  • 위와 동일하게 참조변수 위에 설정


4) @Resource

@Autowired@Qualifier 기능 결합

  • 위와 동일하게 참조변수 위에 설정


🍑스프링 적용 2가지 방법🍑

👉 유지보수(운영) 과정에서 변경되는 객체는 XML 파일에 <bean> 등록
👉 유지보수(운영) 과정에서 변경되지 않는 객체는 최대한 @Component 를 적용
👉 의존성 주입은 @



4. Component

1) 컴포넌트 란?

@Component

  • 부품처럼 사용할 수 있는 소프트웨어 모듈

  • 모듈
    하드웨어 개념

  • 일반적으로 소프트웨어 컴포넌트는 테이블 당 하나씩 작성하며, 테이블에 대한 CRUD 작업을 처리

  • CRUD
    Create(→ Insert), Read(→Select), Update, Delete



2) 비즈니스 컴포넌트

  • 클래스 다이어그램으로 나타냄
  • 4개의 자바 파일이 한 세트
  1. 가장 먼저 만드는 클래스 Value OBject : VO

  2. Data Access Object : DAO

  3. Service 인터페이스

  4. Service 구현 클래스(Impl)



5. Layered Architecture

1) 사용 이유

  • 전부 @Component 를 붙이면 가독성이 떨어짐

  • 컴포넌트를 세분화한 것



2) @Service

비즈니스 로직을 처리하는 Service 클래스에 사용

@Service("userService")
public class UserServiceImpl implements UserService { . . . }


3) @Repository

DB 연동을 처리하는 DAO 클래스에 사용

@Repository
public class UserDAO { . . . }


4) @Contorller

사용자 요청을 제어하는 Controller 클래스에 사용

profile
imaginative and free developer. 백엔드 / UX / DATA / 기획에 관심있지만 고양이는 없는 예비 개발자👋
post-custom-banner

0개의 댓글