자바 엔터프라이즈 애플리케이션을 개발하기 위한 프레임워크
IoC 원칙을 구현하기 위한 컨테이너
BeanFactory
: 기본적인 기능을 제공하는 컨테이너ApplicationContext
: BeanFactory
를 상속하며, 엔터프라이즈 기능을 추가로 제공하는 컨테이너Spring 컨테이너가 객체를 어떻게 생성할 것인지 표현하기 위한 메타데이터
BeanDifinition
: Configuration metadata로 정의한 Bean의 메타데이터 (@Bean
으로 정의)
id
: 단일 이름을 설정하기 위한 필드name
: alias를 적용하기 위한 필드의존성 주입을 위한 방식들
@Autowired
)@Autowired
)ApplicationContext
를 통해 획득 (@Autowired
혹은 ApplicationContextAware
)@Lookup
애너테이션을 통해 획득Bean의 수명주기 범위
singleton
: 단일 인스턴스로 관리 (기본 값)prototype
: 다수의 인스턴스로 관리request
: HTTP 요청 단위로 관리session
: HTTP 세션 단위로 관리application
: ServletContext 단위로 관리수명주기 콜백을 구현하기 위한 방식들
@PostConstruct
와 @PreDestroy
활용InitializingBean
구현init-method
와 destroy-method
설정의존성을 주입받기 위한 애너테이션
required = false
혹은 Optional
, @Nullable
: 주입이 가능하면 주입받도록 함@Primary
: 다른 Bean보다 주입 우선순위를 갖도록 함@Qualifier
: 특정 Bean을 주입받을 수 있도록 태그를 적용함프로퍼티 값을 읽어오는 애터네이션
PropertySourcesPlaceholderConfigurer
빈을 통해 application.yml
파일을 읽어옴classpath를 스캔하여 컴포넌트를 로드하는 기능
@Configuration
클래스에 @ComponentScan
을 적용하여 사용함@SpringBootApplication
에는 해당 기능이 전체 패키지를 기준으로 적용되어 있음@Component
: 일반적인 컴포넌트 애너테이션@Controller
@Service
@Repository
클래스에서 bean definition metadata
를 정의하기 위한 애너테이션
@Bean
: 팩토리 메소드로 bean definition metadata
정의@Confiugration
이 아닌 클래스 내부에서의 @Bean
메소드 호출은 빈을 제공하지 않으므로 주의 (lite 모드)@Configuration
클래스들은 CGLIB에 의해 프록싱되며, @Bean
메소드 호출 시 캐싱된 빈을 제공함@Import
: 다른 Configuration 클래스의 메타데이터 로드@Profile
혹은 @Conditional
: Configuration이 적용될 조건 설정Spring의 여러 애너테이션을 Java 표준 애너테이션으로 대체할 수 있음
프로파일과 프로퍼티들을 갖고 있는 추상화된 객체
sprig.profiles.active
프로퍼티로 프로파일 활성화default
프로퍼티가 담긴 자원을 추상화한 객체
Environment
에서 여러 PropertySource
로부터 프로퍼티 값을 찾아줌-D
명령어 인자)@PropertySoure
: 특정 파일을 읽어, PropertySource를 선언적으로 추가하도록 만드는 애너테이션이벤트 처리를 위한 클래스들
ApplicationEvent
: 이벤트 클래스ApplicationListener
: 이벤트 처리 클래스Spring에서 여러 자원들을 추상적으로 다루기 위한 인터페이스
자원을 추상화한 인터페이스
UrlResource
ClassPathResource
FileSystemResource
PathResource
ServletContextResource
InputStreamResource
ByteArrayResource
Resource를 불러오기 위한 컴포넌트
ApplicationContext
가 ResourceLoader
를 상속함String과 객체 간의 변환을 수행하는 컴포넌트
PropertyEditor
를 대체함ConversionService
: Converter
를 등록하고, 변환 기능을 위임하는 컴포넌트특정 문자열 형식을 기반으로 변환을 수행하는 컴포넌트
FormatterRegistry
: Formatter를 등록하는 곳FormattingConversionService
: FormatterRegistry
와 ConversionService
의 구현체클래스의 필드 값을 검증하기 위한 기능
Spring Expression Language; 런타임 환경에서 객체를 조회하거나 조작하기 위한 표현 언어
Spring이 제공하는 관점 지향 프로그래밍
Aspect
: 여러 클래스를 횡단하는 관심사를 모듈화한 개념Join point
: 프로그램 실행에서의 시점 (e.g. 메소드 호출)Advice
: 특정 Join point
의 Aspect
가 수행하는 동작 (e.g. around
, before
, after
)Pointcut
: 목표로 할 Join point
를 특정하기 위한 조건Introduction
: 대상 타입에 추가적인 메소드나 필드를 정의하는 것Target object
: Advice
가 적용될 대상 객체AOP proxy
: AOP 프레임워크가 Aspect
를 구현하기 위해 생성한 프록시 객체Weaving
: 대상 객체를 생성하기 위해 Aspect
를 적용하는 것 (e.g. 컴파일 타임 Weaving, 런타임 Weaving)Spring IoC를 통한 간단한 AOP 구현을 목적으로 하는 AOP 프레임워크
AopContext.currentProxy()
로 호출할 수 있으나, Spring AOP에 의존하게 됨Spring AOP에서 사용하는 프록싱 방식
Spring AOP보다 강력한 기능을 제공하는 AOP 프레임워크
@EnableAspectJAutoProxy
를 추가하여 적용Null 허용성 정보를 명시적으로 제공하기 위한 애너테이션들
@Nullable
@NonNull
로깅을 통합적으로 제공하기 위한 기능
Servlet API를 기반으로 개발된 웹 프레임워크
DispatcherServlet
으로 모든 요청을 받고, 필요한 곳으로 전해줌DispatcherServlet
이 WebApplicationContext
를 참조함WebApplicationContext
는 ApplicationContext
를 상속함Root WebApplicationContext
에서 기반 빈들을 관리함Servlet WebApplicationContext
에서는 Servlet 관련 빈을 관리함Root WebApplicationContext
을 부모 Context로 둠Spring 프레임워크를 더 쉽게 사용할 수 있도록 하는 프레임워크
starters
)Spring 프레임워크에서 데이터베이스를 추상화하여 사용할 수 있도록 하는 프레임워크
Repository
: 데이터베이스를 추상화한 컴포넌트Spring에서 JPA를 쉽게 사용할 수 있도록 돕는 프레임워크