Bean
Spring Container가 관리하는 객체이다.
ApplicationContext
JSP의 기본 객체, BeanFactory를 확장해서 여러 기능을 추가 정의하는 인터페이스이다.
[web.xml]
ContextLoaderListener(이벤트처리기)를 이용해 Root ApplicationContext 객체(부모)와 Servlet ApplicationContext 객체(자식)를 생성한다.
<context-param> <!-- Root ApplicationContext 설정파일 위치 -->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet> <!-- Servlet ApplicationContext 설정파일 위치 / DispatcherServlet 등록 -->
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
DI, 의존 자동 주입
스프링이 Bean을 자동으로 주입해주는 어노테이션에는 @Autowired, @Resource 두가지가 있다
@Autowired
인스턴스 변수(iv), setter, 참조형 매개변수를 가진 생성자, 메서드에 적용할 수 있다.
생성자의 @Autowired는 생략이 가능하다.
Spring container에서 타입으로 Bean을 검색해서 참조 변수에 자동 주입(DI)한다.
검색된 빈이 n개이면, 그중에 참조 변수와 이름이 일치하는 것을 주입한다.
class Car {
@Autowired Engine engine;
@Autowired Door[] doors;
}
@Resource
Spring container에서 이름으로 빈을 검색해서 참조 변수에 자동 주입(DI)한다.
일치하는 이름의 빈이 없으면 예외가 발생한다.
class Car {
@Resource Engine engine;
}
@Qualifier
같은 타입의 Bean이 여러개있을 때 사용할 객체를 선택할 수 있도록 지정한다.
class Car {
@Autowired
@Qualifier("superEngine")
Engine engine;
}
@Component
특정 객체를 Bean 객체가 될 대상으로 인식하고 Spring이 Bean을 자동으로 주입하도록 만들기 위해서는 반드시 ComponentScan이 필요하다. ComponentScan을 선언하는 방법은 XML과 java 파일 두 가지 방법이 있다. 어느 방법으로든 패키지나 클래스를 Bean 객체가 될 검색의 대상으로 지정해주어야만 한다.
<component-scan>에서 패키지로 등록하면 서브패키지까지 검색해서 @Component가 붙은 클래스를 자동 검색해서 빈으로 등록해준다.
<context:component-scan base-package="com.dev.ch3">
@Component 어노테이션 사용시 id를 생략하면 클래스 명의 첫 글자를 소문자로 바꿔서 자동으로 등록한다.
@Component는 @Controller, @Service, @Repository, @ControllerAdvice의 메타 애너테이션이다.
@Component class Car{}
@Component("sportsCar") class SportsCar extends Car{}
@Component class Truck extends Car{}
@Value & @PropertySource
값을 지정할 때 사용한다. 직접 적어줄 수도 있지만, 시스템 환경변수나 property 값을 불러와 지정할 수 있다.
class Car {
@Value("red") String color;
@Value("100") int oil;
@Autowired Engine engine;
@Autowired Door[] doors;
}
@Component
@PropertySource("setting.properties")
class SysInfo{
@Value("#{systemProperties['user.timezone']}")
String timeZone;
@Value("#{systemEnvironment['PWD']}")
String currDir;
@Value("${autodaveDir}")
String autosaveDir;
}
[src/main/resources/setting/properties]
autosaveDir=/autosave
'WEB > spring' 카테고리의 다른 글
[Spring] @Transactional (0) | 2022.06.22 |
---|---|
[Spring] Controller, Service, DAO, DTO (0) | 2022.06.21 |
[Spring] AOP 개념 및 라이브러리 설치 (0) | 2022.06.17 |
[Spring] validate - 데이터 유효성 검증 (0) | 2022.05.26 |
[Spring] @Annotation 어노테이션 정리 (0) | 2022.05.25 |
댓글