다이나믹 프록시 런타임에 인터페이스 또는 클래스의 프록시 인스턴스 또는 클래스를 만들어 사용하는 프로그래밍 기법이다. 다이나믹 프록시 사용처 스프링 데이터 JPA 스프링 AOP Mockito 하이버네이트 lazy initialzation ... Mockito //MyRepository public interface MyRepository extends JpaRepository { } //MyService public class MyService { MyRepository myRepository; public MyService(MyRepository myRepository) { this.myRepository = myRepository; } public void rent(Book book) { Book s..
인터페이스가 없는 경우 프록시는 어떻게 만드는지 알아보자. 이 때는 라이브러리가 필요하다. (CGlib) CGlib cglib cglib 3.3.0 @Test public void di() { MethodInterceptor handler = new MethodInterceptor() { MyBookService myBookService = new MyBookService(); @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { if(method.getName().equals("rent")) { System.out.println("aaaa")..
DI 의존관계의 설정정보는 Java 코드를 활용하는 것 뿐만 아니라 다른 방법을 사용할 수 있다. 그 중 대표적인 것은 XML방식이다. Java 코드로 DI 의존관계의 설정정보를 이용하게 되면, DI 구성이 바뀔때마다 자바 코드를 수정하고 클래스를 다시 컴파일해야 하는 단점이 발생한다. XML은 단순한 텍스트 파일이기 때문에, 컴파일과 같은 작업이 없고 다루기가 쉽다. XML 설정 Java와 XML의 설정 차이 @Confguration : @Bean : @Bean 메소드를 통해 얻을 수 있는 Bean DI 정보를 세가지로 정의할 수 있다. 빈의 이름 @Bean 메소드 이름이 빈의 이름 이며, 이 이름은 getBean()에서 사용된다. 빈의 클래스 빈 오브젝트를 어떤 클래스를 이용해서 만들지를 정의한다. ..
들어가기에 앞서 final과 static에 대해서 간략히 살펴보자 https://it-mesung.tistory.com/86?category=830540 [Java 기초] static static static은 컴파일러에 의해 .java에서 .class 파일로 로드될 시 우선적으로 method 영역(static, class영역이라고도 부름) 메모리에 할당된다. 이런 이유로, 객체가 heap영역 메모리에 올라가기 전에 호출해.. it-mesung.tistory.com https://it-mesung.tistory.com/85?category=830540 [Java 기초] final final final의 효과 클래스나 메소드 혹은 변수에 final 제어자가 붙을 수가 있는데 각각 다음과 같은 제한이 생긴다..
제어의 역전(IoC)과 의존관계 주입 스프링의 IoC만 볼 때, 서블릿 컨테이너 처럼 서버에서 동작하는 서비스 컨테이너인지 혹은 단순히 IoC 개념이 적용된 템플릿 메소드 패턴을 이용한 프레임워크인지 한 눈에 파악하기 힘들다. 그로 인해, 스프링이 제공하는 IoC 방식에 핵심을 짚어주는 의존관계 주입 이라는 좀 더 명확한 이름을 사용했다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불린다. -> 이런 이유로 IoC 컨테이너를 DI 컨테이너라고 불리기도 한다. 의존관계 주입, 의존성 주입, 의존 오브젝트 주입 DI는 오브젝트 레퍼런스를 외부로부터 제공받고 이를 통해 제공 받은 오브젝트와 다이나믹하게 의존관계가 만들어진다. 이 의미를 함축시켜 만든 키워드 들이 의존관계 주입, 의존성 ..
스프링 부트를 활용한 MVC 동작 SpringBoot Main @SpringBootApplication public class DemoSpringMvcApplication { public static void main(String [] args) { SpringApplication.run(DemoSpringMvcApplication.class); } } Controller @Controller public class EventController { @Autowired EventService eventService; @GetMapping("/events") public String events(Model model) { model.addAttribute("events", eventService.getEve..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/LUBJs/btqCOx7uQfx/yCppyFxNlpaZ8vyKeiF0F1/img.png)
싱글톤 레지스트리와 오브젝트 스코프 DaoFactory를 직접 사용하는 것과 @Configuration을 추가해서 스프링의 애플리케이션 컨텍스트를 통해 사용하는 것은 동일한 것 같이 보인다. 그저 애플리케이션 컨텍스트에 userDao라는 이름의 빈을 요청하면 DaoFactory의 userDao() 메소드를 호출해서 그 결과를 돌려주는 것이라고 볼 수 있다. 하지만, 스프링의 애플리케이션 컨텍스트는 기존에 직접 만들었던 오브젝트 팩토리와 중요한 차이점이 있다. 오브젝트의 동일성과 동등성 동일성 두개의 오브젝트가 완전히 같은 동일한 오브젝트라고 말하는 것 동일성의 비교는 == 연산자를 사용 동등성 동일한 정보를 담고 있는 오브젝트라고 말하는 것 동등성의 비교는 오브젝트의 equals() 메소드를 사용 두 개..
DispatcherServlet의 ViewResolver DispatcherServlet 동작과정에서 viewResolver의 과정을 살펴보자 //DispatcherServlet.class protected void initStrategies(ApplicationContext context) { ... //0. init은 최초의 서블릿을 initializer할 때만 접근한다. this.initViewResolvers(context); ... } private void initViewResolvers(ApplicationContext context) { this.viewResolvers = null; if (this.detectAllViewResolvers) { //1. viewResolver 타입을 모두..
- Total
- Today
- Yesterday
- 자바8
- springboot
- junit
- Effective Java
- 빈 순환 참조
- mustache
- 이펙티브 자바
- java8
- JPA
- Spring
- java
- try with resources
- 인프런
- 생성자
- flatMap
- 정적팩터리메서드
- ifPresent
- @Lazy
- 김영한
- 이펙티브자바
- 팩토리 메소드 패턴
- effectivejava
- package-private
- 연관관계
- 점층적 생성 패턴
- 스프링부트
- jdk버전
- try catch finally
- 복사 팩토리
- 빌더 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |