Spring (2) - Spring IoC
- 개발 환경 준비 1)
- Spring IoC 1) 2)
- Spring MVC 1) 2) 3)
Database 활용- View Template 1) 2) 3) 4) 5)
- AOP / Filter / Interceptor
- File Upload / Download
Spring IoC (제어 역전; Inversion of Control)
-
제어권이 framework에게 있어 필요에 따라 Spring framework가 사용자의 코드를 호출
-
- Spring Container
- bean의 생명주기를 관리한다.
Spring Container
-
BeanFactory
- 객체 생성과 검색에 대한 기능을 정의하는 interface이다. Spring의 IoC를 담당하는 핵심 컨테이너이다.
-
ApplicationContext
- 위의
BeanFactory
interface를 상속하는, 기능이 더욱 추가된 interface이다. 자원 처리 추상화나 메시지, 프로필, 환경변수 등을 처리할 수 있는 기능을 추가로 제공하고 있어BeanFactory
보다 더 자주 사용된다.
-
AnnotationConfigApplicationContext
ApplicationContext
interface를 구현한 클래스로@Configuration
어노테이션이 붙은 클래스를 이용하여 설정 정보를 읽어와 bean객체를 생성, 관리한다.
-
ClassPathXmlApplicationContext
ApplicationContext
interface를 구현한 클래스로 classpath의 XML파일에서 설정 정보를 읽어온다.
Bean 생성 및 주입
1) @Congiguration
어노테이션 클래스에서 직접 등록
- 메서드 자체를 bean객체로 등록하는 방법
- @Configuration
작성
-
@Configuration
- 해당 클래스가 Spring 설정에 사용되는 클래스라는 것을 의미한다. 클래스 이름은 자유롭게 지정 가능하다.
-
@Bean
- 해당 메서드가 생성한 객체를 Spring이 관리하는 bean객체로 등록한다. 메서드 명: bean객체의 이름으로 지정, 구분할 때 사용한다. 메서드의 매개변수는 bean에 등록된 객체가 있다면 자동으로 전달한다.
file
\src\main\java\com\example\demo\config\BeanConfig.java
Java
- main method 수정
-
getBean()
- 생성된 bean객체를 검색할 때 사용된다.
file
\src\main\java\com\example\demo\DemoApplication.java
Java
2) XML 파일에서 정보를 읽어와 등록
- xml 파일 작성
file
\src\main\resources\bean2.xml
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bean2" class="java.lang.Integer">
<constructor-arg value="2324" />
</bean>
</beans>
- main method 수정
file
\src\main\java\com\example\demo\DemoApplication.java
Java
1
2
3
4
5
6
7
8
9
10
11
...
import org.springframework.context.support.ClassPathXmlApplicationContext;
...
ApplicationContext context2 = new ClassPathXmlApplicationContext("classpath:bean2.xml");
int i = (int) context2.getBean("bean2");
System.out.println("bean 생성2 : " + i);
...
3) @ComponentScan
으로 @Component
를 탐색해서 등록
-
@ComponentScan
- Component를 스캔해준다
Spring Boot의 main메서드가 포함된 패키지에 붙는
@SpringBootApplicaiton
어노테이션을Crtl
+클릭
으로 들어가보면@ComponentScan
도 포함되어 있음을 확인할 수 있다. 따라서 해당 클래스가 포함된 package의 하위 package에 대해 스캔하여 빈으로 등록한다. 이 범위를 벗어난 컴포넌트를 빈으로 등록하기 위해@ComponentScan
으로 범위를 지정할 수 있다.
-
basePackage
- 스캔을 시작할 루트(최상위) package를 정해준다.
-
basePackageClasses
- 설정된 클래스의 package로부터 모든 하위의 package에 대해 component를 스캔한다.
- @Configuration
수정
file
\src\main\java\com\example\demo\config\BeanConfig.java
Java
1
2
3
4
5
6
7
...
@Configuration
@ComponentScan(basePackages = "com.example.demo.config")
public class BeanConfig {
...
- class 자체를 검색할 수도 있다
Java
1
2
3
4
5
...
@ComponentScan(basePackageClasses = Bean3.class) //또는 BeanConfig.class
...
- Bean으로 등록할 클래스 작성
file
\src\main\java\com\example\demo\config\Bean3.java
Java
1
2
3
4
5
6
7
8
9
10
package com.example.demo.config;
import org.springframework.stereotype.Component;
@Component
public class Bean3 {
public String run(){
return "세번째 빈";
}
}
- main method 수정
file
\src\main\java\com\example\demo\DemoApplication.java
Java
1
2
3
4
5
6
7
...
ApplicationContext context3 = new AnnotationConfigApplicationContext(BeanConfig.class);
Bean3 b = (Bean3) context3.getBean("bean3"); // 클래스가 컴포넌트화 되면서 첫문자가 소문자가 됨
System.out.println(b.run());
...
Stereo Type Annotation
- Spring에서 기본적으로 제공하는 어노테이션이다.
- 특수한 기능을 가지고 있다.
- 자주 사용되는 대표적인 4종류
@Controller
: 요청과 응답을 처리하는 클래스에 사용한다.@Service
: 비지니스 로직을 구현한 클래스에 사용한다.@Repository
: Persistence 역할을 하는 클래스에 사용한다.@Component
: 위 3가지 어노테이션의 상위(부모) 객체이다.
실습
- 프로젝트 생성(이름: basic)
- 2번째 pdf 파일의 bean 생성 실습 적용
Reference
- 이 포스트는 SeSAC 인공지능 SW 개발자 양성 과정 - 김영식 강사님의 강의내용을 정리한 것입니다.
젼꾸이자 쪄니: 스프링 기본 핵심원리 (스프링 컨테이너와 스프링 빈)
댓글남기기