diff --git a/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookService.java b/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookService.java index 540fe94e..d3bf0562 100644 --- a/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookService.java +++ b/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookService.java @@ -3,4 +3,6 @@ package org.example.proxy; public interface BookService { void rent(Book book); + + void returnBook(Book book); } diff --git a/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookServiceProxy.java b/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookServiceProxy.java index 89f04f7e..3db18e78 100644 --- a/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookServiceProxy.java +++ b/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/BookServiceProxy.java @@ -14,4 +14,9 @@ public class BookServiceProxy implements BookService { bookService.rent(book); System.out.println("다른기능!!"); } + + @Override + public void returnBook(Book book) { + + } } diff --git a/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/DefaultBookService.java b/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/DefaultBookService.java index 57b95acd..26302d9b 100644 --- a/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/DefaultBookService.java +++ b/code-manipulation/dynamic-proxy/src/main/java/org/example/proxy/DefaultBookService.java @@ -6,4 +6,9 @@ public class DefaultBookService implements BookService{ public void rent(Book book) { System.out.println("rent: " + book.getTitle()); } + + @Override + public void returnBook(Book book) { + System.out.println("return: " + book.getTitle()); + } } diff --git a/code-manipulation/dynamic-proxy/src/test/java/org/example/proxy/BookServiceTest.java b/code-manipulation/dynamic-proxy/src/test/java/org/example/proxy/BookServiceTest.java index a59dc5b2..b5efd5b3 100644 --- a/code-manipulation/dynamic-proxy/src/test/java/org/example/proxy/BookServiceTest.java +++ b/code-manipulation/dynamic-proxy/src/test/java/org/example/proxy/BookServiceTest.java @@ -2,9 +2,28 @@ package org.example.proxy; import org.junit.Test; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + public class BookServiceTest { - BookService bookService = new BookServiceProxy(new DefaultBookService()); +// BookService bookService = new BookServiceProxy(new DefaultBookService()); + BookService bookService = (BookService) Proxy.newProxyInstance( + BookService.class.getClassLoader(), new Class[]{BookService.class}, + new InvocationHandler() { + BookService bookService = new DefaultBookService(); + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if (method.getName().equals("rent")) { + System.out.println("로깅!!"); + Object invoke = method.invoke(bookService, args); + System.out.println("다른기능!!"); + return invoke; + } + return method.invoke(bookService, args); + } + }); @Test public void proxy() { @@ -13,5 +32,6 @@ public class BookServiceTest { book.setTitle("spring"); bookService.rent(book); + bookService.returnBook(book); } } \ No newline at end of file