일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 코틀린 함수
- 아펠가모
- 아펠가모선릉
- 스프링 AOP
- db index
- git명령어
- HTTP
- Kotlin
- 400에러
- Srping AOP
- 스페인
- 코틀린
- 아펠가모 선릉
- 마드리드
- 바르셀로나
- kopring
- 그라나다
- 스페인 준비물
- b-tree index
- HTTP #웹기술
- kotiln
- 코프링
- 관심지향프로그래밍
- elk
- @Component
- c# scv
- 세비야
- sprintboot
- 본식후기
- http상태코드
- Today
- Total
끄적이는 메모장
[Spring] Bean이란 본문
서버 개발자에서 웹 기술 개발자가 되기 위한 스텝. Spring 이해하기 (2)
: Spring의 구조에서 Spring Core의 영역
Bean : 스프링 컨테이너에 의해 생성되는 자바의 "객체"
- 설정 메타데이터(XML)에 의해 생성이 됨
Bean의 속성 : 속성에 설정된 정보를 토대로 객체가 생성이 됨
- class : 자바의 클래스 명
- id : Bean의 식별자
- scope : 객체의 범위 (기본은 singleton)
- constructor-arg : 객체 생성시 생성자에 전달할 인수 (constructor injection)
- property : 생성시 bean setter에 전달할 인수 (setter injection)
- init-method : 객체 생성시 실행되는 함수
- destory-method : 객체 소멸시 호출되는 함수
예시 ) <bean id = "TEST" class = "com.kor.test"> <constructor-arg> <value type = "long> 1000 </value> </constructor-arg> </bean> |
-> com.kor.test 클래스의 id는 TEST, singleton객체가 생성 시 생성자에 long type의 인수에 값 1000이 전달됨
Bean의 Scope : 기본적으로 Singleton객체가 됨 - 한 번 생성되어 모든 객체가 동일한 객체를 참조하는 방식
- 다른 Scope를 지정 할 수 있음
prototype | 요청마다 새로운 객체를 생성 |
request | http request 하나에 대한 생명 주기 |
session | http session과 동일한 생명 주기 |
# 생각해보기
Singleton 객체에서 prototype객체를 주입 받는다면?
- prototype의 주입은 한 번만 받게 될 것 (즉, 요청마다 새로운 객체를 생성하겠다는 의미가 제대로 작동되지 않음)
- scope에 대한 개념을 잘 이해해야함
Springboot에서의 Bean
@Component annotation을 이용하여 스프링 빈 객체로 등록
@Component를 확장한
1. @Controller : MVC의 Controller 객체임을 명시
2. @Service : 로직이 수행되는 Servcie 객체임을 명시
3. @Reposotory :DAO 객체임을 명시
@Autowired annotation : Bean을 자동으로 주입시켜줌
예시 ) @Component public class BeanExample1 {
@Autowired BeanExample2 beanExample2;
.... } |
-> BeanExample1 클래스에서 BeanExample2 bean을 주입받아 사용할 수 있음
@Component를 사용하는 것 외에도 @Bean & @Configuration을 이용하여 Bean을 설정 할 수도 있음
- @Bean은 @Configuration이 설정된 클래스의 메서드에서 사용이 가능
- 메서드의 반환객체가 스프링의 bean 객체임을 선언하는 구조
- @Scope를 통해 객체의 Scope를 조절 가능 (기본은 singleton)
예시 ) @Configuration public class ConfigExample {
@Bean public FirstBean firstBean() { retrun new FirstBean(); }
@Bean public SecondBean secondBean() { SecondBean second = new SecondBean(); second.setGreetings("HI"); //setter injection return second; } } |
-> 객체를 바로 반환하는 Bean 설정도 가능하고 객체 생성시 setter injection이 가능하도록 만들 수 도 있음
동일한 이름의 Bean이 생성되는 경우 @Primary와 @Qualifier를 이용하여 객체를 선택
- @Primary : 객체의 생성에 우선권을 부여 (@Bean과 @Component에서 함께 사용이 됨)
- @Qualifier : 객체를 주입 받을 때 주어진 Bean의 이름과 동일한 객체를 찾음 (@Autowired와 함께 사용이 됨)
예시) - SuperBean interface를 구현한 FirstBean과 SecondBean @Configuration public class ConfigExample {
@Bean(name="fisrt") @Primay public SuperBean firstBean() { FirstBean first = new FirstBean(); return first; }
@Bean(name="second") public SuperBean secondBean() { SecondBean second = new SecondBean(); return second; } } -------------------- @Autowired SuperBean superbean; // @Primary annotation에 의해 FirstBean이 만들어짐 -------------------- @Autowired @Qulifier("second") SuperBean superbean; // @Qulifier annotaion에 의해 SecondBean이 만들어짐 |
-> @Primary와 @Qualifier의 우선순위는 @Qualifier가 더 높음
BeanFactory vs ApplicationContext 차이, 특징
- BeanFactory :
Bean을 등록, 생성, 반환에 대항 관리를 함. 정의는 즉시 로딩하지만 객체는 필요시 생성
- ApplicationContext :
기본적으로 BeanFactory의 기능을 수행
Bean을 미리 생성 후 즉시 제공(Singleton scope 객체만)
글로벌 Text Message를 관리가능
이미지 등의 파일 로드를 지원함
리스너로 등록된 bean에 이벤트 전달을 지원
트랜잭션과 AOP의 상당한 지원
'웹기술 개발자 되기 > Spring' 카테고리의 다른 글
[Spring] AOP란 (0) | 2020.04.10 |
---|---|
[Spring] Spring Framework란 (0) | 2020.04.06 |