본문 바로가기

728x90
반응형

분류 전체보기

(222)
Spring @Configuration @Bean 스프링 빈 등록 방법 프로그램으로 Spring Bean 설정시 @Configuration, @Bean 어노테이션을 이용할 수 있다. 클래스에 @Configuration을 설정하면 Class안애 @Bean메서드가 1개 이상 있어야하고 메서드는 빈 인스턴스를 생성해 반환한다. 스프링 컨테이너는 @Bean을 설정한 메서드가 반환하는 인스턴스를 관리한다. @Configuration public class TestAppConfiguration{ @Bean(name="testAppService") public TesetAppService testAppService() { return new TestAppServiceImpl(); } }​ @Bean에 설정한 name 속성은 스프링 컨테이너에 등록할 때 사용하는 빈이름이다. XML파일에 ..
스프링 빈 라이프 사이클(Spring Bean Life Cycle) 스프링 빈은 스프링컨테이너에 의해서 관리된다. 프로그램이 실행되면서 스프링 컨테이너가 시작되고, 컨테이너의 요청에 따라 빈의 인스턴스를 생성하고 의존성을 주입한다. 스프링 컨테이너가 닫히면 빈이 파괴된다. init(), destroy() 메소드 대신 사용자 정의 메소드 이름을 선택할 수 있다. 빈이 인스턴스화될 때 init메소드를 실행하고 컨테이너를 닫을 때 destroy()메소드를 실행한다. 빈 라이프 사이클 빈 객체 생성 ⬇️ 빈 프로퍼티 설정 ⬇️ BeanNameAware.setBeanName() ⬇️ ApplicationContextAware.setApplicationContect() ⬇️ BeanPostProcessor 초기화 전처리 postProcessBeforeInitialization ⬇️..
Spring ResourceHttpRequestHandler ☝ ResourceHttpRequestHandler 정적 리소스를 처리하는 작업을 담당한다. 유연한 캐시설정을 허용해서 브라우저 성증에 최적화된 정적 리소스를 제공한다. 요청에 대한 리소스가 있는지 확인한 후 처음으로 발견한 리소스를 Expires와 헤더와 함께 리턴한다. Cache-Controll, Last-Modified를 적절하게 평가해서 이미 캐시한 리소스에 대해 불필요한 오버헤드를 방지한다. /static, /public, /resources, /META-INF/resources 디렉터리에 있는 정적컨텐츠를 사용한다. ☝ Custom Path Patterns 기본적으로 스프링은 모든 정적 컨텐츠를 루트 밑에 제공하고 있다. 기본 구성이 좋은 것 같지만 설정을 변경할 수 있다. spring.mvc..
Spring MVC 동작 방식 (DispatcherServlet) ❓ MVC모듈 서블릿 기반 웹 어플리케이션에 사용할 수 있는 프레임워크로 객체 사이의 관심사를 분리할 수 있는 프레임워크이다. 컨트롤러 : 요청을 처리 검증기(Validator) : 검증을 수행 모델 : 데이터를 저장 🔘기본적인 동작방식 client에서 요청이 드들어오면 맵핑되는 Controller를 호출한다. 컨트롤러에서 ModelAndView객체를 리턴하면 뷰이름에 해당하는 페이지를 리턴한다. 스프링 웹 MVC는 SimpleUrlHandlerMapping과 InternalResourceViewResolver 빈을 자동으로 감지해서 요청을 처리하는 컨트롤러와 뷰를 찾는다. 🔘 DispatcherServlet 스프링 웹 MVC기반 어플리케이션에서는 요청을 DispatcherSetvlet이 가로챈다. (요..
Spring boot thymeleaf 로 Error페이지 처리 🔍 모든 에러를 다 잡아낼 수 없기 때문에 Spring에서 ErrorController를 구현해서 에러페이지를 처리할 수 있다. package org.springframework.boot.web.servlet.error; import org.springframework.stereotype.Controller; /** * Marker interface used to identify a {@link Controller @Controller} that should be used * to render errors. * * @author Phillip Webb * @author Scott Frederick * @since 2.0.0 */ public interface ErrorController { } @Cont..
Spring ExceptionHandler & ControllerAdvice 💡 SpringBoot가 제공하는 ExceptionResolver 1. ExceptionHandlerExeptionResolver @ExceptionHandler 처리 > API 예외처리 2. ResponseStatusExceptionResolver @ResponseStatus(value=HttpStatus.NOT_FOUND) Http 상태코드를 지정해준다. 3. DefaultHandlerExceptionResolver 스프링 내부 기본 예외를 처리한다. ☝ ExceptionHandler @Target ( 값 = METHOD ) @Retention ( 값 = RUNTIME ) @Documented public @interface ExceptionHandler 특정 핸들러 클래스 또는 핸들러 메서드에서 예..
모던자바인액션 13강 디폴트 메서드 ❓ 디폴트 메서드가 나온 배경 자바 8이전에 자바에서는 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드를 구현하여 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 그런데 인터페이스에 새로운 메서드를 추가하는 경우가 있으면 해당 인터페이스를 구현했던 모든 클래스의 구현을 고쳐야 한다. 자바8 API에서 List 인터페이스에 sort같은 메서드를 추가했기 때문에 문제가 발생할 수 있다. 자바 8에서 기본 구현을 포함하는 인터페이스를 정의하는 두 가지 방법을 제공하는데 첫 번째, 인터페이스 내부에 정적 메서드를 사용하는 것 두 번째, 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드 기능을 사용하는 것 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디..
모던자바인액션 12강 Date, Calendar 날짜와 시간 API ❓ 기존 자바에서 날짜 표현 자바 1.0에서는 java.util.Date클래스 하나로 날짜와 시간 기능을 제공했다. Date클래스는 밀리초단위로 표현이 된다. Date date = new Date(117, 8, 21); // 출력 결과 Thu Sep 21 00:00:00 CET 2017 Date클래스의 출력은 직관적이지 않고 JVM기본 시간대인 CET 즉, 중앙 유럽시간대를 사용했다. 자바 1.1에서 Date클래스의 대안으로 java.util.Calendar클래스를 제공했다. 하지만 Calendar역시 달의 인덱스는 0부터 시작하는 등의 설계 문제가 있었다. DateFormat같은 일부 기능을 제공했지만 Date클래스에만 작동했기에 개발자들에게 더 혼란을 가중시켰다. DateFormat은 스레드에 안전하..

728x90
반응형