Spring Boot
@SpringBootApplication 어노테이션
SpringBoot Application이 실행되면 메타파일, config파일을 읽어 context를 로딩하고, 현재 클래스가 위치하는 패키지와 그 하위 패키지의 클래스의 @Annotation을 스캔해서 초기화(객체 생성, 의존성주입)하는 작업을 한다.
특정 패키지를 스캔할 땐 @ComponentScan(basePackages = {"package"}) 어노테이션을 사용한다.
ApplicationContext(root Context)
스프링 컨테이너로 비지니스 객체를 생성하고 맵 형태로 가지고 있는다.
Dao => @Repository
Service => @Service
기타 객체 => @Component
DataSource 또는 SqlSession => @Configuration
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().type(DriverManagerDataSource.class).build();
}
}
Mapper => @Mapper (mybatis annotation)
Injection 필요한 객체는 @Autowired(required=true)
Application Context는 Web Application Context를 호출 할 수 없다.
> Dispatcher Servlet이 브라우져로부터 request를 받으면,
HandlerMapping 객체로부터 요청 url 에 해당하는 Controller객체 얻기
> Dispatcher Servlet이 Controller의 메소드 호출 후 Service를 실행하고 반환된 forwardPath 얻기
> Dispatcher Servlet이 View Resolver 객체에 forwardPath를 보내 View 얻기
> Dispatcher Servlet이 View에 데이터를 전달할 Model객체를 보내면,
View에서 model객체의 데이터를 포함시켜 브라우져에 응답
Handler
@Configuration
public class SimpleUrlHandlerMappingConfig {
@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
SimpleUrlHandlerMapping simpleUrlHandlerMapping
= new SimpleUrlHandlerMapping();
Map<String, Object> urlMap = new HashMap<>();
urlMap.put("/hello", helloController());
simpleUrlHandlerMapping.setUrlMap(urlMap);
simpleUrlHandlerMapping.setOrder(0);
return simpleUrlHandlerMapping;
}
@Bean
public HelloController helloController() {
return new HelloController();
}
}
Spring에서 내부적으로 처리하는 과정을 코드로 구현한 것이다.
HandlerMapping은 urlMap에 "/hello" url을 키로, helloController()를 값으로 Map에 저장하고 있다.