일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 추상클래스
- 백준
- http 메시지 컨버터
- HttpServletResponse
- 스프링
- DI
- objecterror
- 코딩테스트
- 싱글톤
- fielderror
- 코드트리조별과제
- 오블완
- @configuration
- 김영한
- equals()
- 다형성
- ocp
- 티스토리챌린지
- 프록시
- java
- 참조변수
- 의존관계
- 테스트코드
- 스프링컨테이너
- html form
- 오버라이딩
- 코드트리
- 서블릿
- JSON
- 인터페이스
- Today
- Total
목록TIL (147)
minOS
빈 생명주기 콜백 시작데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화 종료 작업이 필요하다.스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제를 통해 알아보자 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정하자. 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 했다. 이 NetworkClient는 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어두어야하고, 애플리케이션이 종료되면 disconnect()를 호출해서 연결을 끊는다.예제public class NetworkClient { private ..
조회한 빈이 모두 필요할 때의도적으로 해당 타입의 스프링 빈이 다 필요한 경우도 있다.예를들어, 할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate,fix)를 선택할 수 있다고 가정해 보자.스프링을 사용하면 소위 말하는 전략 패턴을 매우 간단하게 구현할 수 있다.1) 모든 빈 조회public class AllBeanTest { @Test void findAllBean(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); } static class DiscountService{ p..
애노테이션 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일시 타입 체크가 안된다. 그래서 다음과 같이 애노테이션을 만들어서 문제를 해결할 수 있다. 애너테이션 정의 package com.example.core.annotation; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import java.lang.annotation.*; @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType..
문제 - 조회된 빈이 두개 이상일때 @Autowired는 타입으로 조회한다. @Autowired private final DiscountPolicy discountPolicy; 타입으로 조회하기 때문에 스프링 빈에서 학습했듯이, 타입으로 조회하면 빈이 2개 이상일 때 문제가 발생한다. DiscountPolicy의 하위 타입인 FixDiscountPolicy,RateDiscountPolicy 둘 다 스프링 빈으로 선언하면 @Component public class RateDiscountPolicy implements DiscountPolicy{} @Component public class FixDiscountPolicy implements DiscountPolicy {} 이 상태에서 의존관계 자동 주입을..
롬복 프로젝트에 추가하는 법 https://devgoat.tistory.com/14 [Spring Boot] Lombok 추가하기. (Intellij, Gradle) ■ 목표 - Spring Boot 프로젝트에 Lombok을 추가한다. ■ 사용 툴 - Intellij Ultimate 버전. - SpringBoot는 Gradle 사용. 1. build.gradle 파일에 의존성 추가. build.gradle 파일 dependencies에 아래 의존성을 추가한다. imp devgoat.tistory.com 생성자 주입은 전부 불변이고, 생성자에 final 키워드를 사용하고, 생성자를 만들고, 주입받는 코드를 만들어야한다. @Component public class OrderServiceImpl impleme..
생성자 주입 과거에는 수정자 주입과 필드 주입을 많이 사용했지만 ,최근에는 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다. "불변" 1) 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료시점 까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 종료 전까지 변하면 안된다.(불변해야 한다.) 2) 수정자 주입을 사용하면 setXxx메서드를 public으로 열어놔야 한다. 누군가가 실수로 변경할 수도 있고 ,변경하면 안되는 메서드를 열어두는 것은 좋은 설계 방법이 아니다. 3) 생성자 주입은 객체를 생성할 때 딱 한번만 호출되므로 이후로 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다. "누락" 프레임워크 없이 순수한 자바 코드 단위를 테스트 하는 경우에 다음과 같이 ..