🍀Spring

핸들러 매핑과 핸들링 어댑터 SpringMVC 구조  1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러를 조회한다. 2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 3. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다. 4. 핸들러 실행 5. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다. 6. viewResolver 호출 : 뷰 리졸버를 찾고 실행한다. 7. View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다. 8. 뷰 렌더링 : 뷰를 통해서 뷰를 렌더링한다.    HttpRequestHandlerpublic interf..
스프링 빈의 생명주기 관리빈이 생성되거나 소멸되는 경우 특정한 작업을 하고싶은 경우가 있다.예를 들어, 빈이 생성될 때 데이터베이스 커넥션 풀을 미리 생성하는 경우이다. 이러한 작업을 위해 스프링 빈의 초기화 작업과 종료 작업을 처리하는 방법을 알아보자.  스프링 빈의 이벤트사이클스프링 컨테이너 생성 → 빈 생성 → 의존관계 주입 →  초기화 콜백  → 사용 → 소멸전 콜백 →  스프링 종료 초기화 콜백: 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출된다.소멸전 콜백: 빈이 소멸되기 직전에 호출된다. 스프링 빈 생명주기 콜백 사용방법인터페이스(InitializingBean, DisposableBean) 사용설정 정보 초기화 메서드, 종료 메서드 지정@PostConstruct, @PreDestroy ..
다양한 의존관계 주입 방법1. 생성자 주입2. 수정자 주입 (setter 주입)3. 필드 주입4. 일반 메서드 주입 생성자 주입생성자에 @Autowired: @Component를 통해 스프링 빈에 등록될 때 스프링 컨테이너가 해당 빈을 찾아 주입 해준다.@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy;// @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy ..
@ComponentScan@ComponentScan은 @Component 및 @Service, @Repository, @Controller, @Configuration등과 같이 @Component가 붙어있는 Class들을 자동으로 Scan하여 스프링 Bean으로 등록해주는 역할을 수행한. @Component는 클래스에 사용되며, 빈으로 등록될 때에는 클래스명을 사용하여 등록한다.이때, 클래스의 맨 앞글자만 소문자로 바꿔서 저장한다. 만약 Member 클래스의 경우에는 Bean으로 등록되는 경우 member로 등록되는 것이다.   컴포넌트 스캔과 자동 의존관계 주입이 어떻게 동작하는지 그림으로 알아보자. 1. @ComponentScan  2. Autowired 의존관계 자동 주입 생성자에 @Autowire..
웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다.웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. -> 우리가 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다.-> 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다 메모리 낭비가 심하다.-> 해결 방안은 해당 객체가 딱 1개만 생성되고 공유하도록 설계하면 된다. (싱글톤 패턴) 싱글톤 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다.private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다.싱글톤 패턴을 적용한 ..
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.Long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.] with root cause ~~~~   스프링 부트 3.2부터 매개변수의 이름을 인식하지 못하는 문제가 있다고 한다.스프링 ..
https://velog.io/@sunnamgung8/%EC%9E%90%EB%B0%94-%EC%83%9D%EC%84%B1%EC%9E%90Constructor [자바] 생성자(Constructor)생성자란 new 연산자에 의해서 단 한 번 호출되는 단위입니다. 우리는 그 동안 생성자를 따로 정의하지 않았습니다. 하지만 객체는 new 연산자에 의해서 무조건 단 한 번 호출됩니다. 우리가 그 동velog.io  NoArgsConstructor : 파라미터가 없는 디폴트 생성자를 생성@AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 생성@RequiredArgsConstructor : final이나 @NonNull으로 선언된 필드만을 파라미터로 받는 생성자를 생성 @NoArgsCon..
변수 - SpringELObjectuser.username : user의 username을 프로퍼티 접근 user.getUsername()user['username'] : 위와 같음 user.getUsername()user.getUsername() : user의 getUsername() 을 직접 호출Listusers[0].username : List에서 첫 번째 회원을 찾고 username 프로퍼티 접근list.get(0).getUsername()users[0]['username'] : 위와 같음users[0].getUsername() : List에서 첫 번째 회원을 찾고 메서드 직접 호출MapuserMap['userA'].username : Map에서 userA를 찾고, username 프로퍼티 접근m..
타임리프 특징서버 사이드 HTML 렌더링 (SSR)네츄럴 템플릿스프링 통합 지원  서버 사이드 HTML 렌더링 (SSR)타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용된다. 네츄럴 템플릿타임리프는 순수 HTML을 최대한 유지하는 특징이 있다.타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용을 확인할 수 있고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. 즉, 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿(natural templates)이라 한다. 스프링 통합 지원타임리프는 스프링과 자연스럽게 통합되고, 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다. ..
스프링 컨테이너 생성스프링 컨테이너가 생성되는 과정을 알아보자  1. 스프링 컨테이너 생성//스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);  2. 스프링 빈 등록스프링 컨테이너는 @Bean 어노테이션이 달린 메서드를 스프링 빈에 등록한다. 이때 빈 이름은 메서드 이름을 사용하며 빈 이름을 직접 부여할 수 도 있다.@Bean(name = "memberService2")  3. 스프링 빈 의존관계 설정 - 준비  4. 스프링 빈 의존관계 설정 - 완료   컨테이너에 등록된 모든 빈을 조회해보자.package hello.core.beanfind;import h..
말동말동현
'🍀Spring' 카테고리의 글 목록