작성
·
354
0
ParentInterface parentInterface = (ParentInterface)Proxy.newProxyInstance(HelloApplication.class.getClassLoader(), new Class[]{ParentInterface.class}, (proxy, method, args) -> {
System.out.println("메소드 수행전에 할일");
Object methodResult = method.invoke(new ChildClass(), args);//child라는 class에 args를 모두 넘긴다
if(method.getName() == "sayHello"){//메서드 이름에 따라.. 처리를 분류할 수 있으니 다 정의하지 않아도됨 모든 메서드에 대해 기본적으로 정의되는거니까 중복도 피할 수 있음
System.out.println("sayHello!");
return methodResult;
}
System.out.println("sayOne!");
return methodResult;
});
parentInterface.sayHello();
//클라이언트는 인터페이스타입에 대해 그 메서드를 호출한다 이 인터페이스에 대한 메서드를 호출하면 위에서 정의한대로 프록스 객체를 런타임에 하나 만들어줘서
//위에서 정의한 대로의 로직을 타고 클라이언트에게 결과를 전송해준다
parentInterface.sayOne();
지금 인터페이스에 대한 .class정보를 넘겨주고 있어요
그리고 Proxy.newProxyInstance메서드로 들어가보면 넘겨준 class정보를 가지고 생성자를 만든다거나 하는것같거든요
그런거 자체가 리플렉션을 활용하는 행위인가요?
(class이름).class <- 이표현자체는 리플렉션을 활용하는 문장인가요?
cglib, 바이트 버디는 리플렉션을 사용하지 않나요?