BeanFactory와 ApplicationContext BeanFactory는 스프링 컨테이너를 만들어주는 가장 최 상위 인터페이스이다. 스프링 빈을 관리하고 조회하는 역할을 한다. 예시로 getBean 등 관련된 함수를 가지고있다. 우리는 보통 스프링컨테이너를 ApplicationContext라고 부른다. ApplicationContext는 BeanFactory를 모두 상속받아서 제공해준다. 그렇다면 BeanFactory를 직접 사용하면 되지않은가? 라는 의문이 들 수 있지만, ApplicationContext는 BeanFactory에서 상속받은 기능 말고도 다양한 기능을 한다. 아래 그림을 참고해보자 MessageSource 메시지소스를 활용한 국제화 기능 예를들어서 한국에서 들어오면 한국어로, 영..
import java.util.Map; public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConfigTest.class); @Test @DisplayName("부모타입으로 조회 시,자식이 둘 이상 있으면 중복오류가 발생한다.") void findBeanType() { Assertions.assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class)); } @Test @DisplayName("둘 이상의 자식이 있는 경우, 빈 이름을..
@Configurable 어노테이션을 통해 스프링 컨텍스트에 빈을 등록한 후 확인하는 방법을 테스트 코드로 작성해보겠다. @Configurable public class AppConfig { @Bean public MemberService memberService(){ return new MemberServiceImpl(getMemberRepository()); } @Bean private MemberRepository getMemberRepository() { return new MemoryMemberRepository(); } @Bean public OrderService orderService(){ return new OrderServiceImpl(getMemberRepository(), getDi..
프록시 프록시란 데이터베이스 조회를 지연할 수 있는 가짜 객체로써 실제 사용하는 시점에서 DB를 조회하도록 도와준다. 실제 객체와는 겉모양이 같고, 실제 객체에 대한 참조를 보관하고있다. 또, 프록시 객체를 호출하면 실제 객체의 메소드를 호출한다. 보통 객체를 조회할 경우 em.fine()를 사용하지만, 프록시 객체를 사용하기 위해선 em.getReference()를 사용한다. 아래 예시를 참고해보자, DB를 조회하지도않고 실제 객체를 생성하지도않는다. Member member = new Member(); member.setUsername("아이유"); em.persist(member); em.flush(); em.clear(); // 처음 Id값은 존재하기에 Member findMember = em.g..
좋은 객체 지향 설계의 5가지 원칙(SOLID) SRP: 단일 책임 원칙(single responsibility principle) OCP: 개방-폐쇄 원칙(Open/closed principle) LSP: 리스코프 치환 원칙(Liskov substitution principle) ISP: 인터페이스 분리 원칙(Interface segregation principle) DIP: 의존관계 역전 원칙(Dependency inversion principle) 1. SRP: 단일 책임 원칙(single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이..
스트림의 최종연산 가. reduce() Stream의 데이터를 더하거나 빼는 등 사칙연산을 사용하여 하나의 값으로 출력한다. 예제 : 1~10까지의 값을 모두 더하는 방법이다. IntStream intStream = IntStream.rangeClosed(1, 10); int num = intStream.reduce((x, y)-> x+y) .orElse(0); 연산을 하기에 초기값 설정을 해준다. 연산을 하기에 초기값 설정 방법은 2가지가 있다. 첫번째 : orElse IntStream intStream2 = IntStream.rangeClosed(1, 10); int num = intStream.reduce((x, y)-> x+y) .orElse(0); System.out.println(num); /..
자바의 정석 ch14 26~29 스트림의 중간연산(1) 1. 스트림의 중간연산 스트림 자르기(1/7) 가. skip() 해설 : 앞에서부터 n개 건너뛴다. 사용법 : Stream skip(long n); 나. limit() 해설 : maxSize 이후의 요소는 잘라낸다. 사용법 : Stream limit(long maxSize) 예제 : IntStream intStream = IntStream.rangeClosed(1, 10); // 12345678910 intStream.skip(3).limit(5).forEach(System.out::print) //45678 2. 스트림의 중간연산 스트림의 요소 걸러내기(2/7) 가. distinct() 해설 : 중복제거 사용법 : Stream distinct() ..
- Total
- Today
- Yesterday
- lambda
- ApplicationContext
- stream
- container
- springboot
- 최종연산
- docker
- Vue
- Vuex
- elasticsearch
- 차이
- vscode
- JPA
- map
- mvn
- 영속성 컨텍스트
- MAC
- 자바8
- 람다
- 스트림
- java
- NPM
- BeanFactory
- AnnotationConfigApplicationContext
- nginx
- 중간연산
- install
- Intellij
- webpack
- ngnix
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |