Java/Spring Boot

Spring Boot

최고다최코딩 2023. 9. 12. 13:46
728x90

 

@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에 저장하고 있다.