自己在研究SpringAop的時候,其最基本的核心是動态代理,也可以說是Aop是動态代理的一種實作方式。
下面自己做了個測試,依據的是jdk,在Eclipse上可以運作。
需求:當使用者的權限不為null時,才會通路接口裡面的方法。
一 、定義接口類-----jdk的動态代理是依據接口實作的
public interface PersonServicw {
public void save(String s);
public void update(String name, Integer password);
public String getPersonMan(Integer personId);
}
二、定義接口實作類---也就是常說的目标類(被代理的類)
public class PerSonServiceImpl implements PersonServicw {
private String user = null;
public PerSonServiceImpl(String user) {
this.user = user;
}
public String getUser() {
return user;
public void setUser(String user) {
public PerSonServiceImpl() {
public String getPersonMan(Integer personId) {
return "xxx";
public void save(String s) {
System.out.println("我是save()方法");
public void update(String name, Integer password) {
System.out.println("我是update()方法");
三 、PersonHander ----寫入自己
public class PersonHander implements InvocationHandler{
private PerSonServiceImpl perSonServiceImpl;
public Object createProxyInstance(PersonServicw perSonServiceImpl){
this.perSonServiceImpl=(PerSonServiceImpl)perSonServiceImpl;
return Proxy.newProxyInstance(this.perSonServiceImpl.getClass().getClassLoader(),
this.perSonServiceImpl.getClass().getInterfaces(), this);
}
public Object invoke(Object arg0, Method method, Object[] arg2) throws Throwable {
Object result=null;
if(perSonServiceImpl.getUser()!=null){
result=method.invoke(perSonServiceImpl, arg2);
}else{
System.out.println("該使用者沒有權限");
}
return result;
測試類:
public static void main(String[] args) throws Exception{
PersonServicw perSonServiceImpl=new PerSonServiceImpl();
PersonHander hander=new PersonHander();
PersonServicw personServicw=(PersonServicw)hander.createProxyInstance(perSonServiceImpl);
personServicw.save("88");