[AspectJ] privileged aspect
public class Emp {
private String name;
private String email;
}
이런 클래스가 있습니다. 이게 전부입니다.
public class EmpTest {
@Test
public void javaBean() throws Exception {
Emp emp = new Emp();
emp.setName("keesun");
assertEquals("keesun", emp.getName());
emp.setEmail("keesun@email.com");
}
}
이런 테스트가 돌아갈까요? 훗.. 그럴리가요. 있지도 않은 메서드(게터, 세터)를 마구 썼는데 될리가 없죠. 그러나.. 잘 돌아갑니다.
어떻게 된걸까요? privileged aspect를 사용하면 타겟의 private 또는 protected 멤버에도 접근할 수 있습니다.
http://www.eclipse.org/aspectj/doc/released/progguide/semantics-aspects.html#aspect-declaration
스프링 AOP로 이런 일을 하려면 Introduction을 사용 해야겠는데.. 그게 참.. 그리 쉽지 않았던 기억이 납니다. 하지만 AspectJ로는 간단하네요~
privileged aspect EmpAspect {
//JavaBean
public String smdis.model.Emp.getName() {
return this.name;
}
public void smdis.model.Emp.setName(String name) {
this.name = name;
}
public String smdis.model.Emp.getEmail() {
return this.email;
}
public void smdis.model.Emp.setEmail(String email) {
this.email = email;
}
}
이렇게 추가할 메서드를 넣어주고 마치 자기가 가지고 있는 변수처럼 사용하면 됩니다.