싱글톤 빈 요청과 다르게, 프로토타입 빈 요청은 요청마다 새로운 프로토타입 빈을 생성하고 필요한 의존관계를 주입한다. 클라이언트에 전달 후 반환 및 관리는 하지 않는다. 스프링 컨테이너는 프로토타입 빈을 생성, 의존관계 주입, 초기화까지만 처리한다. 프로토타입 빈을 관리할 책임은 클라이언트에 있기 때문에 @PreDestroy 등의 종료 메서드가 호출되지 않는다. package hello.core.scope; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org...
스프링 컨테이너에서 싱글톤은 기본적으로 동작한다. @Test @DisplayName("스프링 컨테이너와 싱글톤") void springContainer(){ // 1. 조회 : 호출할 떄마다 객체 생성 ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); // 2. 조회 : 호출할 때마다 객체 생성 MemberService memberService1 = ac.getBean("memberService", MemberService.class); MemberService memberService2 = ac.getBean("memberService", MemberService.class); // 참조 값이 다른 것을 확인..
AppConfig 클래스를 hello.core 디렉터리의 하위에 넣는다. public class AppConfig { public MemberService memberService(){ return new MemberServiceImpl(new MemoryMemberRepository()); } } 이렇게 MemberService() 함수를 정의해를 해주고, MemoryMemberRepository()를 매개변수로 한 MemberServiceImpl 객체를 반환한다. 이는 다음과 같은 코딩 방식을, 이렇게 바꿔주는 것이 가능하도록 한다. 이 코드는 인터페이스만 확인할 수 있으며 구현체에 전혀 의존하지 않는 코드가 되는 것이다. 즉 AppConfig는 생성한 객체 인스턴스의 참조를, 생성자를 통해서 주입 ..
회원 도메인 개발 Member 도메인 package hello.core.member; public class Member { private Long id; private String name; private Grade grade; public Member(Long id, String name, Grade grade) { this.id = id; this.name = name; this.grade = grade; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.nam..
EJB (Enterprise JavaBeans) : 기업 환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델 POJ 의 개념의 도래 (순수 자바로 돌아감) ↓ EJB 컨테이너를 대체할 Spring EJB 엔티티빈 기술을 대체할 Hibernate, JPA의 새로운 표준을 정의하였다. '스프링' 이라는 이름은 전통적인 EJB라는 겨울을 넘어 새로운 시작이라는 뜻을 가짐. + Entity Bean ORM 기술, 쿼리를 쓰지 않고 객체를 기준으로 데이터를 다루는 것 스프링 부트 별도의 웹 서버를 설치하지 않아도 됨 스프링과 외부 라이브러리 자동 구성 단독으로 실행할 수 있는 스프링 Application을 쉽게 생성 핵심 컨셉 : 스프링은 자바 언어 기반의 프레임워크 - 객체 지향 언어 스프링은 좋은 객체 지향 ..
Item 클래스의 도메인부터 서비스, Test 코드까지 작성 후 Swagger와 연동하여 Request를 요청해보았다. 처음으로 뜬 에러는 ItemPhoto에 대한 flushing문제 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - ..
개발의 편의성을 위해서 순수 JPA에서 Data JPA로 개발 방법을 옮겼다. * 추가 요구사항 - 카트 : 아이템 = 다 : 1 연관관계 추가하기 0. 개발환경 설정 build.gradle compile('org.springframework.boot:spring-boot-starter-data-jpa') 1. Item.java package springstudy.spring.domain; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Table(name = "item") @Getter @Setter public cl..