Spring/Basic

· Spring/Basic
request 스코프@Controller@RequiredArgsConstructorpublic class LogDemoController { private final LogDemoService logDemoService; private final MyLogger myLogger; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDem..
· Spring/Basic
빈 스코프빈이 존재할 수 있는 범위싱글톤기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프프로토타입스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고더는 관리하지 않는 매우 짧은 범위의 스코프웹 관련 스코프request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 프로토타입 스코프프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다요청 => 프로토타입 빈을 생성, 필요한 의존관계를 주입반환 => 생성한 프로토타입 빈을 클라이언트에 반환 / 같은 요청이 오면 항상 ..
· Spring/Basic
스프링 빈의 이벤트 라이프사이클스프링 컨테이너 생성스프링 빈 생성의존관계 주입초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출사용소멸전 콜백 : 빈이 소멸되기 직전에 호출스프링 종료의존관계 주입이 완료 되기 전에 초기화 작업을 하면 적용이 안됌@Bean 등록시 ~.setxx(xx) 이런거 해주면 안들어간다는 소리  @PostContruct / @PreDestroy()정상적으로 값 대입 후 출력 완료public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); } public void setUrl(String url) { this.u..
· Spring/Basic
의존관계 주입생성자 주입생성자 호출 시점에 딱 1번만 호출 되는 것이 보장불변, 필수 의존관계에 사용final 키워드!!!!생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다컴파일 오류는 세상에서 가장 빠르고 좋은 오류!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@Componentpublic class OrderServiceImpl implements OrderService { private final UserRepository userRepository; private final DiscounPolicy discountPolicy; @Autowired public OrderServiceImpl(UserRepository userRe..
· Spring/Basic
ComponentScan@Configuration@ComponentScan( basePackages = "hello.core", // 탐색할 패키지의 시작 위치를 지정 excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)))public class AutoAppConfig {}// ex) filter로 Configuration을 걸면 @Configuration을 가지고 있는 다른 클래스들을 빼고 등록@ComponentRepositoryServiceRateDiscountPolicy...// @Component로 스캔할 대상을 등록함빈 이름 기본 전략: MemberServiceImpl 클래스 => member..
· Spring/Basic
스프링 DI 컨테이너(싱글톤 컨테이너)스프링 컨테이너를 통해 사용자의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 재사용할 수 있게 됌 싱글톤 방식의 주의점여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지하게 설계하면 안됌무상태로 설계해야 함특정 클라이언트에 의존적인 필드가 있으면 안됌특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안됌가급적 읽기만 가능해야 함필드 대신에 자바에서 공유되지 않는 지역변수, 파라미터 등을 사용해야 함스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있음public class StatefulService { private int price; // 상태를 유지하는 필드 ..
· Spring/Basic
BeanFactory스프링 컨테이너의 최상위 인터페이스스프링 빈을 관리하고 조회하는 역할을 담당getBean() 제공 ApplicationContext빈 관리기능 + 편리한 부가 기능 제공메시지소스를 활용한 국제화 기능환경변수애플리케이션 이벤트이벤트를 발행하고 구독하는 모델을 편리하게 지원편리한 리소스 조회 XML 설정 사용// xml // userRepository // discountPolicy// 여기를 고려  BeanDefinition빈 설정 메타정보라 함class, xml, xxx 등을 읽어서 BeanDefinition을 만들고스프링 컨테이너는 BeanDefinition만 알고자 함 BeanClassName: 생성할 빈의 클래스명factoryBeanName: 팩토리 역할의 빈을 사용할 경..
· Spring/Basic
의존 관계public interface DiscountPolicy { int discount(Member member, int price);}public class FixDiscountPolicy implements DiscountPolicy { private int discountFixAmount = 1000; @Override int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { return discountFixAmount; } else { return 0; } }}public class RateDiscountPolicy implements ..
· Spring/Basic
Controller 동작 관련@Controllerclass ~ { @GetMapping("test") public String ~ (@RequestParam("a") String a, Model model) { model.addAttribute("a", a); return "test_view"; }}// Controller로 등록하고// @GetMapping 안에 적어준 경로가 요청되면// ?a=test 이런식으로 @RequestParam에 들어갈 내용을 받아주고// model에 a라는 이름으로 받아온 값을 저장해서// test_view로 던져주면// test_view에서는 던져준 a를 view에 원하는 곳에 활용@Controller@ResponseBody // 얘 추가됌c..
· Spring/Basic
Servlet 실행 안되거나jsp 실행이 안된다?   maven, java17, tomact10.1.28 사용jakarta EE 10 사용 Tomcat 다운https://tomcat.apache.org/download-10.cgiEdit configuration 설정Edit Configuration => tomcatServer local => Server에 Configure 누르고 다운한 파일 경로 추가deployment + artifacts => application context "/"로 설정 Edit Configuration 설정 과정 중 Artifact가 없을 경우Project Structure => Artifacts => 왼쪽 위 "+" 버튼 => web Application: Exploded ..
· Spring/Basic
웹 스코프웹 스코프는 웹 환경에서만 동작한다.웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출된다.requestHTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다. sessionHTTP Session과 동일한 생명주기를 가지는 스코프application서블릿 컨텍스트( ServletContext )와 동일한 생명주기를 가지는 스코프websocket웹 소켓과 동일한 생명주기를 가지는 스코프 @Scope(value = "request")HTTP 요청 당 하나 씩 생성되고, HTTP 요청이 끝나는 시점에 소멸requestURL 은 이 빈이 생성되는 시점에는 알 수 없으므로, 외부에서 ..
· Spring/Basic
스코프빈이 존재할 수 있는 범위싱글톤기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.웹 관련 스코프request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다.session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다.application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. 컴포넌트 스캔 자동 / 수동 등록@Scope("prototype")@Componentpublic class HelloBean {}@Scope("prototype")@BeanPrototypeBean HelloBean() { r..
류가든
'Spring/Basic' 카테고리의 글 목록