스코프 싱글톤 프로토타입 Request Session WebSocket ... 싱글톤 객체 사용주 주의 사항 프로퍼티가 공유된다는 것을 알아야 한다. 즉, 쓰레드 세이프티 하게 코딩해야 한다. ApplicationContext 만들 때 생성되기 때문에 애플리케이션 구동시 시간이 걸릴 수 있다. 1. 싱글톤과 프로토타입 package org.kyhslam; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @Component @Scope("prototype") public class Proto { } import org.springframework.beans.factory.a..
1. 컴포넌트 스캔 주요기능 스캔 위치 설정 필터 : 어떤 애노테이션을 스캔 할지 또는 하지 않을 지 설정 2. Conponent @Repository @Service @Controller @Configuration 3. 동작원리 @ComponentScan은 스캔할 패키지와 애노테이션 정보 실제 스캐닝은 ConfigurationClassPostProcessor 라는 BeanFactoryPostProcessor에 의해 처리된다.
| Autowire 필요한 의존 객체의 "타입"에 해당하는 빈을 찾아 주입한다. required : 기본값은 true (따라서 못 찾으면 애플리케이션 구동 실패) 1. 사용 위치 생성자 세터 필드 2. 같은 타입의 빈이 여러개 일때 @Primary 해당 타입의 빈 모두 주입 받기 @Qualifier(빈 이름으로 주입 받기)
@NoArgsConstructor(access = AccessLevel.PROTECTED) 인스턴스를 new로 해서 만드는걸 방지한다. 이렇게 되면 생성자 변경할 경우 유지보수가 어려워진다. 아래생성자는 @NoArgsConstructor(access = AccessLevel.PROTECTED) 붙이면 할 필요가 없다. protected OrderItem() { }
트랜잭션 처리방법 트랜잭션 처리방법 스프링에서는트랜잭션처리를 지원하는데 그중어노테이션 방식으로@Transactional을 선언하여 사용하는 방법이 일반적이며,선언적 트랜잭션이라 부른다. 클래스, 메서드위에@Transactional이 추가되면, 이 클래스에 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 이 프록시 객체는@Transactional이 포함된 메소드가 호출 될 경우,PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback 한다. [ [Spring] Transactional 정리 및 예제 [Spring] @Transactional 정리 및 예제 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 어노테이션 @Transa..
클래스명 변경 : Shift + F6 해당 클래스의 TestCase 만들기 : Shift + Ctril +T 부분 클래스 생성 : Ctrl + Alt + M Book book = new Book(); book.setName("시골 jpa"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); 를 아래와 같이 함수로 만들어준다. private Book createBook() { Book book = new Book(); book.setName("시골 jpa"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); return book; } 변수 자동생성 : Ctrl + ..
📝 [Spring] 스프링 PSA 1. PSA(Portable Service Abstraction) Spring은 Sprng Triangle이라고 부르는 세가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. Spring의 Petclinic 예제를 보면 서블릿 어플리케이션임에도 불구하고 서블릿이 전혀 존재하지 않는다. 단지 @Controller 애노테이션이 붙어있는 클래스에서 @GetMapping, @PostMapping과 같은 @RequestMapping 애노테이션을 사용해서 요청을 맵핑한다 실제로는 내부적으로 서블릿 기반으로 코드가 동작하지만 서블릿 기술은 추상화 계층에 의해 숨겨져 있는 것이다. 이렇게 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것..
📝 스프링 AOP 개념 및 적용 방법 | 1. AOP(Aspect Oriented Programming) Spring은 Spring Triangle 이라고 부르는 세가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. AOP는 Aspect Oriented Programming의 약자로 '측면/양상 지향적인 프로그래밍' 이라는 의미이다. class A { method a(){ AAA a가 하는 일 BBB } method b(){ AAA a가 하는 일 BBB } } class B { method c(){ AAA c가 하는 일 BBB } } 위와 같이 동일한 일을 하는 AAA ,BBB가 여러군대에서 사용되고 이렇게 흩어져 있으면 코드 변경이 필요한 경우 모든 부분을 일일히 수정을 해주어야 한다...
| 의존성 주입(DI, Dependency Injection)의 세가지 방법 Spring은 @Autowired애노테이션을 이용한 다양한 의존성 주입 방법을 제공한다. @Autowired 애노테이션은 Spring에게 의존성을 주입하라는 지시자 역할로 쓰이는데 생성자, 필드, Setter 에 붙일 수 있다. 1. 생성자 주입 @Controller public class OwnerController { private final OwnerRepository owners; @Autowired //
| 빈(Bean) Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean) 이라고 부른다. new 연산자로 생성한 객체는 빈이 아니다. ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다. 즉 Spring에서의 빈은 ApplicationContext가 알고 있는 객체, ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다 | 빈(Bean)을 등록하는 방법? Component Scanning* 직접 XML이나 자바 설정 파일에 등록 (But, XML로 사용할 경우 빈을 일일이 다 등록 해줘야 하는 불편함이 있다. 그래서 등장한 것이 Component Scan 이다.) | Component Scan 을 통한 등록 방법 @ComponentSc..
일반적인 (의존성에 대한) 제어권: "내가 사용할 의존성은 내가 만든다." // 예시 class OwnerController { private OwnerRepository repository = new OwnerRepository(); } 📝 IoC(Inversion of Control) 의존관계주입(DI : Dependency Injection) 이라고도 한다. 의존 객체를 직접 만드는게 아니라 주입받아 사용받는 것을 말한다 스프링이 빈 객체를 관리한다. 빈의 의존성 관리해준다. 관리해준다는 건 필요한 의존성들을 각각 주입을 해준다는 것이다. 예시 class OwnerController { private OwnerRepository repo; public OwnerController(OwnerRepos..
📝 서블릿 서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설치하고, 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 서버를 실행한다 스프링 부트는 톰캣 서버를 내장하고 있으므로, 톰캣 서버 설치 없이 편리하게 서블릿 코드를 실행할 수 있다 📝 HttpServletRequest 역할 HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편하다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다 HttpServletRequest, HttpServletResponse를 사용할 때 가장 중요한 점은 이 객체들이 HTTP 요청 메시지, 응..