城市猎人

在一网情深的日子里,谁能说得清是苦是甜,只知道确定了就义无反顾
posts - 1, comments - 7, trackbacks - 0, articles - 89

AOP之静态代理和动态代理

Posted on 2009-08-02 11:31 sailor 阅读(913) 评论(2)  编辑  收藏 所属分类: spring
一、静态代理:
    静态代理要求代理对象和被代理对象实现同一个对象。

IUserService:
package com.swjs.aop.serivce;

import java.util.List;

/**
 * 
@author jason
 *
 
*/

public interface IUserService {
    List getUserList();
}


被代理类UserService:
package com.swjs.aop.serivce;

import java.util.List;

/**
 * 
@author jason
 *
 
*/

public class UserService implements IUserService {

    
public List getUserList() {
        System.out.println(
"get Userlist");
        
return null;
    }


}

代理类:
package com.swjs.aop.serivce;

import java.util.List;

/**
 * 
@author jason
 *
 
*/

public class SecureProxy implements IUserService{

    
private IUserService userService;

    
public SecureProxy(IUserService userService) {
        
super();
        
this.userService = userService;
    }

    
    
public List getUserList()
    
{
        System.out.println(
"身份检查");
        userService.getUserList();
        System.out.println(
"事务提交");
        
return null;
    }

}

测试类:
package com.swjs.aop.serivce;

/**
 * 
@author jason
 *
 
*/

public class StaticProxyTest {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        IUserService userService 
= new UserService();
        SecureProxy proxy 
= new SecureProxy(userService);
        proxy.getUserList();
    }

}


显示结果:
身份检查
get Userlist
事务提交

二:动态代理
接口
public interface IUserService {

    
public void getUserList(int start, int limit);
}


业务方法:
public class UserService implements IUserService {

    
public void getUserList(int start, int limit) {
        System.out.println(
"start: " + start + " limit: " + limit );
        System.out.println(
"get user List");
    }

}

处理器:
public class SecureHandler implements InvocationHandler {

    
private IUserService service;
    
    
    
public SecureHandler(IUserService service) {
        
super();
        
this.service = service;
    }



    
public Object invoke(Object proxy, Method method, Object[] arg)
            
throws Throwable {
        System.out.println(
"trac begin");
        System.out.println(arg.length);
        
for(int i = 0; i <  arg.length; i++)
        
{
            System.out.println(arg[i]);
        }

        method.invoke(service, arg);
        System.out.println(
"trac end");
        
return null;
    }


}


测试类:
public class DynamicProxyTest {

    
public static void main(String[] args)
    
{
        IUserService service 
= new UserService();
        SecureHandler handler 
= new SecureHandler(service);
        IUserService serv 
= (IUserService)Proxy.newProxyInstance(service.getClass().getClassLoader(), 
                        service.getClass().getInterfaces(), handler);
        serv.getUserList(
0,10);
    }

}

显示结果:
trac begin
2
0
10
start: 
0 limit: 10
get user List
trac end

Feedback

# re: AOP之静态代理和动态代理  回复  更多评论   

2014-12-05 17:03 by AloneAli
实质就是装饰者模式?

# re: AOP之静态代理和动态代理  回复  更多评论   

2014-12-05 17:11 by AloneAli
@AloneAli不好意思,弄错了。代理模式是种模式。。。不是装饰者模式。

只有注册用户登录后才能发表评论。


网站导航: