일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPQL
- Servlet
- Proxy
- Spring Boot
- 스프링 핵심 기능
- 알고리즘
- QueryDSL
- kotlin
- 스프링
- jpa
- spring
- Thymeleaf
- Exception
- 자바
- 인프런
- transaction
- 백준
- AOP
- Greedy
- JDBC
- 그리디
- 김영한
- Android
- java
- http
- db
- 스프링 핵심 원리
- pointcut
- SpringBoot
- springdatajpa
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
싱글톤 빈과 프로토 빈 함께 사용 시 발생하는 문제점 해결해보자. 이 전 글에서 생긴 문제점은 다음과 같다. 프로토 타입 빈은 요청할 때 마다 새로 생성하고 싶다. 하지만 싱글톤 빈 생성시 프로토타입이 주입이된다. 따라서 싱글톤 빈 내부의 프로토타입은 새로 생성되지 않는다. 왜냐 싱글톤 빈에서 스프링 컨테이너에 프로토타입 빈을 더이상 요청하지 않기 때문. 해결하기 위해서는 싱글톤 빈에서 applicationContext를 주입 받고 매번 요청하면 해결 가능.. 이처럼 의존관계를 직접 찾는 것을 dependency loockup (DL)이라 함. 흠.. 근데 applicationContext를 주입받아서 사용하는거는 좀... 이 문제는 해결하기 위해서는 딱 DL기능 만 제공하는 기능이 필요 1. Objec..
프로토타입 빈은 스프링 컨테이너에 요청할 때 마다 새로운 인스턴스 생성하여 반환함. 그런데 싱글톤 빈과 같이 사용하면 의도치 않은 동작을 한다. 1. 프로토타입 빈 직접 요청 어떤 protoType Bean이 있다고 하자. 해당 클래스에는 addCound method를 제공한다. 만약 A client가 prototypeBean을 요청하고 prototypeBean1이라는 이름으로 받으려고 한다. 스프링 컨테이너는 인스턴스를 새로 생성해서 반환한다(prototypeBean1, @x01) 그리고 client A는 addcount를 실행한다.ㄷ protypeBean.getCount를 하면 1이 리턴된다. 이 때 Client B도 prototypeBean을 요청하고 prototypeBean2라는 이름으로 받으려고..
1. 빈 스코프?? 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어, 스프링 컨테이너가 종료될 때 까지 유지된다. 이것은 스프링 빈이 싱글톤 "스코프"로 생성되기 때문이다. 스코프는 빈이 존재할 수 있는 범위를 의미함 2. 스코프 종류? 싱글톤 : 기본 스코프, 스플이 컨테이너의 시작~종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존 관계 주입까지만 관여하고, 더는 관리하지 않는 매우 짧은 범위의 스코프, 초기화 까지 해줌. -->종료메서드 호출 안됨. 웹 관련 스코프 - request : 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프 - session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 - application : 웹의 서..
1. 빈 생성, 의존성 주입 후 실행할 method 지정 : @PostConstruct @PostConstruct public void init() { System.out.println("NetworkClient.init"); connect(); call("초기화 연결 메세지"); } 2. 빈 소면 전에 실행할 method 지정 : @PreDestroy @PreDestroy public void close() { System.out.println("NetworkClient.close"); disconnect(); } 3. Test public class BeanLifeCycleTest { @Test public void lifeCycleTest(){ AnnotationConfigApplicationCon..
설정 정보에 초기화, 소멸 메서드 지정이 가능하다. @Bean(initMethod = " ~", destoryMethod = " ~~") 1. @Bean 등록 public class BeanLifeCycleTest { @Test public void lifeCycleTest(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); NetworkClient client = ac.getBean(NetworkClient.class); ac.close(); } @Configuration static class LifeCycleConfig{ @Bean(initMethod = "ini..
DB 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요한다. 1. Test 시작시 connect되고 애플리케이션 종료시 close되는 코드를 작성해보자. NetworkClient class public class NetworkClient { private String url; public NetworkClient(){ System.out.println("생성자 호출, url =" + url); connect(); call("초기화 연결 메세지"); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 pub..
자동 등록을 선호 @Component면 끝남 자동 빈 등록은 사용해도 OCP, DIP 지킬 수 있다. - annotation 수정은 필요 할 수 도 ㅎ 언제 수동으로 등록하는게 좋음? 애플리케이션은 크게 두 종류로 나눌 수 있음. 업무 로직 빈 : cotroller, service, repository 모두 업무로직, 보통 비즈니스 요구사항 개발시 추가, 변경됨. - 업무 로직은 숫자도 많고...controller, service, repository처럼 패턴이 있음. - 이럴 경우 자동 기능을 적극 사용하자. - 문제 발생하면 명확하게 파악 가능. 기술 지원 빈 : 기술적인 문제, AOP 처리할때 사용. db연결, 공통 로그 처리..등등 - 수자 적고, 애플리케이션에 광범위하게 영향 미침. - 문제가 ..
가끔 해당 타입의 스프링 빈이 다~ 필요한 상황이 있다. 1. AllBeanTest @Autowired 통해 DiscountPolicy 타입에 해당하는 스프링 빈을 받고, 출력하는 service를 작성 설정 클래스는 AutoAppConfig와 DiscountService를 등록 어? DiscountService를,, 설정파일..로..? --> Component class로 등록임 Component scan에 의해 DiscountService도 스프링 빈으로 등록됨 Create a new AnnotationConfigApplicationContext, deriving bean definitions from the given component classes and automatically refreshing..