본문 바로가기
JAVA/java

[spring] DI

by Garonguri 2022. 4. 15.
728x90

- Spring

  • 자바 어플리케이션 개발을 위한 프레임워크.
  • 비즈니스 로직을 넣어 어플리케이션을 만든다.
  • 스프링의 대표적 기능 : DI, AOP

- DI (Dependency Injection)

(의존성 :  어떤 클래스가 다른 클래스를 멤버로 포함하고 있는 상태. 즉, 멤버 변수라고 생각해도 됨.)

 

- 의존성을 없애려면 어떤 것을 해야 할까?

1. 직접적인 클래스를 사용 X -> interface 사용

2. 객체를 직접 생성 X -> 객체를 주입받아라.

  • 기존에 직접 했던 멤버에 값을 주입(멤버 변수에 값을 세팅)하는 방법인 setter, 생성자 사용  ==> Spring 이 담당.
  • - IOC (Inversion of Container)

- 객체를 생성하고, 객체를 주입하는 것이 Container의 역할이다. 

- 객체 관리 시 자동적으로 singleton으로 관리해준다.

- 의존성을 주입해서, 유지보수(변경)을 용이하게 해준다.

 

 


Spring application이 동작하려면 POJO(Business logic), 설정 정보, 스프링 프레임워크 IoC Container가 있어야 한다.

 

Spring framework 만들고,

POJO 만들기. -> 자바 코드로만 이루어짐. 아직 스프링의 향이 느껴지는 곳은 없음..

 

 

 


메타 정보 작성 방법

- XML config : 명시적인 빈 작성

- Annotation config : 묵시적인 빈 생성=>  xml + annotation or java + annotation 

- Java config : 명시적인 빈 생성 -> @Configuration

 

Spring에서는 type 기반이 권장.

 

 


[ (현재까지) 자주 쓰는  Annotation  ]

  • @Configuration : file이 bean에 대한 설정을 담고 있다는 의미
  • @Bean : 이것은 bean이므로 singleton으로 관리한다는 의미

 

  • @Component : 이것은 bean이 될 클래스라는 의미.
  • @ComponentScan : @Component라고 되어 있는 class를  찾아서 bean으로 등록해준다는 의미.

 

  • @Autowired : 해당하는 타입의 bean이 있는지를 찾아서 넣어준다. type기반으로 bean 연결
  • @Qulifier : 이름 기반으로 bean을 제한시킨다는 의미.
  • @Value : String, int 등 Bean이 아닌 스칼라 값을 주입 받을 때 사용한다.
  • @PropertySource : property 파일에 저장된 value값을 읽어올 때 사용한다.

 

[ bean을 용도에 따라 분류해보자 !  -> streotype ]

  • @Repository
  • @Service
  • @Controller
  • @Configuration
  • @Component

 

[ test ]

  • @Test
  • Junit이라는 test framework를 사용한다.
  • (Life cycle ->) @BeforeEach, @BeforeAll, @AfterAll, @AfterEach
  • @RunWith : (Junit 4.x) Junit과 Spring을 연결시키기 위해 사용함.
  • @ExtendWith : (Junit 5.x) Junit과 Spring을 연결시키기 위해 사용함.
  • @ContextConfiguration : 어떤 설정 파일을 가지고 test할까요?

[ lombok ]

  • @Slf4j : lombok --> Logger를 삽입해서 log라는 변수를 생성해준다. 얘를 이용해 log를 남길 수 있음.
  •  
728x90

'JAVA > java' 카테고리의 다른 글

[spring] MVC  (0) 2022.04.19
[spring] AOP  (0) 2022.04.15
[Backend] Survlet, jsp  (0) 2022.04.03
Cookie (vs Session), + EL표현식  (0) 2022.03.25
WAS, MVC 패턴에 대하여  (0) 2022.03.23

댓글