728x90
특정 타입의 빈을 동적으로 가져오는 방법class DiscountService { private final Map policyMap; private final List policies; public DiscountService(Map policyMap, List policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } /** policyMap = {rateDiscountPolicy=RateDiscountPolicy@xxxx, fixDiscoun..
@Autowired 에서 조회되는 빈이 2개 이상일 때@Autowired- 타입을 기준으로 조회하기 때문에 같은 타입의 빈이 2개 이상이면 `@NoUniqueBeanDefinitionException` 오류가 발생한다. 조회 대상 빈이 2개 이상일 때 해결 방법- @Autowired 필드명 또는 파라미터명을 이용한 매칭 (거의 사용 X)- @Qualifier 를 이용한 명확한 구분 - @Primary 를 이용한 기본 빈 설정 @Autowired 필드명 또는 파라미터명을 이용한 매칭 (거의 사용 X) - 타입 매칭 시도 > 필드명 / 파라미터 명으로 매칭 시도@Autowiredprivate DiscountPolicy rateDiscountPolicy @Qualifier 를 이용한 명확한 구분 - 추가적인..
롬복- 생성자, @Autowired, get / set, toString 등 코드를 최적화할 수 있는 라이브러리이다.- 자바의 애노테이션 프로세서라는 기능을 이용하여 컴파일 시점에 코드를 자동으로 생성해준다. 롬복 적용 방법1. build.gradle 에 아래의 코드를 추가한다.2. 플러그인에서 `lombok`을 설치한다.3. 설정 > preferences > annotation processors > enable annotation processing 체크한다. > 참고 - 처음에 스프링 스타터에서 프로젝트 생성할 때 dependencies 에서 lombok 을 선택할 수 있다.configurations { compileOnly { extendsFrom annotationProcess..
스프링 컨테이너 (애노테이션 기반 자바 코드 설정)// 스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); `ApplicationContext`를 스프링 컨테이너라고 한다.이때, ApplicationContext 는 인터페이스이며, AnnotationConfigApplicationContext 는 인터페이스의 구현체이다.스프링 컨테이너는 생성자가 클래스 정보를 받으면, 해당 클래스가 스프링 빈으로 자동 등록된다. 스프링 컨테이너는 두 가지 방식으로 설정할 수 있다.1. `XML 기반` (거의 사용 X)2. `애노테이션 기반의 자바 설정 클래스` (거의 대부분) 스프..
빈 출력하기모든 빈 출력하기@Test@DisplayName("모든 빈 출력하기")void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name=" + beanDefinitionName + " object=" + bean); }}스프링에 등록된 모든 빈 정보를 출력할 수 있다. 애플리케이션 빈 출력하기@Test@DisplayName("모든 빈 출력하기")void findAllBean..
AOP가 없던 상황모든 메서드의 호출 시간을 측정할 때 문제가 발생한다. 기존 방식- 시간을 측정하는 공통된 로직은 공통 관심 사항이다.- 핵심 비즈니스 로직과 섞여 유지보수가 어렵다. 기존 방식 코드public Long join(Member member) { long start = System.currentTimeMillis(); try { validateDuplicateMember(member); memberRepository.save(member); return member.getId(); // 이 3줄만 핵심 비즈니스 로직이다. } finally { long finish ..
순수 JDBC- JDBC 표준 인터페이스를 통해 표준화하여 여러 개의 데이터베이스에 동일하게 적용할 수 있다.- DataSource 를 주입받아, `getConnection( )`을 통해 데이터베이스와 연결된 소켓을 얻을 수 있다.- 반복 코드가 굉장히 길고 많다. (Connection, PreparedStatement, ResultSet 을 항상 열고 닫는 try-finally 구조가 필요)- SQL 문을 직접 작성해야 한다. > 참고 - 스프링 부트가 자동으로 데이터베이스 접속 정보로 DataSource을 생성하여 스프링 빈으로 등록한다. 예시 코드public class JdbcMemberRepository implements MemberRepository { private final Da..
H2 데이터베이스 설치- 교육용으로 적합- 개발, 테스트 용도로 가볍고 편리- 웹 화면 제공 H2 데이터베이스 설치를 위해 https://www.h2database.com/ 에 접속한 뒤, 원하는 버전을 선택해 설치한다.(H2 데이터베이스 홈페이지) 스프링 부트 2.x > 1.4.200 버전 다운로드스프링 부트 3.x > 2.1.214 버전 이상 다운로드 압축을 풀고,`h2` 파일에 들어가 `bin`폴더로 들어간다. 맥- `chmod 755 h2.sh` 로 권한을 줘야 실행이 된다.- `./h2.sh` 으로 h2.sh 파일을 실행한다. 윈도우- `./h2.bat` 로 h2.bat 파일을 실행한다. 정상 생성이 되지 않는 경우, url의 `:` 부분 앞 아이피 부분을 지우고, `localhost`로 수정하..