스프링 빈은 기본적으로 '싱글톤'으로 만들어진다. 그 외 방법으로 인스턴스 반환을 하게 하고싶은 경우 scope에 설정해주어야 한다.
- singleton : 스프링 컨테이너당 하나의 인스턴스 빈만 생성 (default)
- prototype : 컨테이너에 빈을 요청할 때마다 새로운 인스턴스 생성
- request : HTTP Request별로 새로운 인스턴스 생성
- session : HTTP Session별로 새로운 인스턴스 생성
<bean id="memberService" class="com.test.hello.service.MemberService" scope="여기에 설정" />
🌽 스프링 빈 설정 (Annotation)
- 빈으로 사용될 클래스에 @Autowired annotation을 부여해 주면 자동으로 빈 등록
- 이때 반드시 context.xml파일에 component-scan을 설정해주어야 함
// servlet-context.xml (Web 관련)
<context:component-scan base-package="com.test.board.controller" />
// root-context.xml (Non-Web 관련)
<context:component-scan base-package="com.test.board.model" />
🌽 Dependecy Injection
- 객체 간의 의존관계를 자신이 아닌 외부의 조립기가 수행
- 제어의 역행 이라는 의미로 사용
- DI 통해 시스템에 있는 각 객체를 조정하는 외부 개체가 객체들에게 생성시에 의존관계를 주어짐
- 느슨한 결합의 주요 강점
- 객체는 인터페이스에 의한 의존 관계만을 알고 있으며, 이 의존 관계는 구현 클래스에 대한 차이를 모르는채 서로 다른 구현으로 대체 가능
- Spring Container가 DI 조립기 제공
🍃 Spring 설정
📗 .xml
1. 빈 객체 생성 및 주입
- 주입할 객체를 설정파일에 설정
- name : 주입 받을 곳에서 호출 할 이름 설정
- id : 주입 받을 곳에서 호출 할 이름 설정(유일 값)
- class : 주입 할 객체의 클래스
2. 빈 객체 얻기
- 설정 파일에 설정한 bean을 Container가 제공하는 주입기 역할의 api를 통해 주입 받음
ApplicationContext ctx = new ClassPathXmlApplicationContext("com/test/board/controller/applicationContext.xml");
CommonService memberService = ctx.getBean("memberService", "MemberService.class");
property : get/set 메서드 주입
<bean id="dao" class="com.test.board.dao.UserDao">
<bean id="memberDao" class="com.test.board.dao.MemberDao">
<property name= "get/set메서드명" value="문자열이파라미터" />
<property name= "get/set메서드명" ref="객체가파라미터" />
</bean>
constructor-arg : 생성자 주입
<bean id="dao" class="com.test.board.dao.UserDao">
<bean id="memberDao" class="com.test.board.dao.MemberDao">
<constructor-arg value="홍길동" /> // name 변수
<constructor-arg value="30" /> // age 변수
<constructor-arg ref="dao" />
</bean>
📘 Annotation
Annotation의 종류
- @Repository : DAO 클래스에 사용, AOP 적용 대상을 선정하기 위해 사용
- @Service : Service 클래스에 사용
- @Controller : MVC Controller에 사용, 스프링 웹 서블릿에 의해 웹 요청을 처리하는 컨트롤러 빈으로 선정
- @Component : 위의 Annotation을 구분해 적용하기 어려운 일반적 경우 사용
@Autowired
스프링 프레임워크에서 지원하는 Dependency 정의 용도의 Annotation으로 정밀한 DI가 필요한 경우에 유용하다.
🌽 Spring Bean의 생명 주기(Life Cycle)
빈 생성 -> 의존성 주입 -> init-method 실행 -> 빈 사용 -> destroy-method 실행 -> 빈 소멸
'Back-End > Spring' 카테고리의 다른 글
[Spring] 스프링 특징 IOC, AOP, DI 이란? (0) | 2023.12.14 |
---|---|
[Spring] pom.xml / web.xml / servlet-context.xml / root-context.xml (0) | 2023.04.30 |
[Spring] Spring MVC (0) | 2023.04.30 |
[Spring] AOP (Aspect Oriented Programming) (0) | 2023.04.28 |
[Spring] Spring Framework란? (0) | 2023.04.25 |