Java动态代理

来源:互联网 发布:新买ssd怎么装系统知乎 编辑:程序博客网 时间:2024/06/05 10:09

Java代理实现:
1. 静态代理;
2. 动态代理;
2.1:基于JDK动态代理;
2.2:基于CGLIB动态代理;

一、静态代理:
1. 必须有接口
2. 代理类只能用在定义好的一个接口里面
3. 如果有n个接口,写n个实现,n个代理类
4. 必须修改调用方

此代理一般很少使用。

代理类与被代理类公用接口,这也能是静态代理的实现关键,就是通过公用接口实现。具体看代码实现:

/* * 抽象主题角色 */public interface IEmpDao {    void tent();}

要被代理的类,要被增强的类,实现公共接口

/** *真实主题角色 */public class EmpDao implements IEmpDao {    @Override    public void tent() {        System.out.println("EmpDao.租房()");    }}

代理类,在此添加要增强的逻辑:

public class EmpDaoProxy implements IEmpDao {    private IEmpDao empDao;    //通过构造器将要被代理的类传入    public EmpDaoProxy(IEmpDao empDao){        this.empDao=empDao;    }}

//实现公共接口方法,增强

@Overridepublic void tent() {    System.out.println("看房");    //调用被代理的方法,前后添加增强逻辑    empDao.tent();       System.out.println("收钱");}

测试:

/** * 测试类 */public class StaticProxyTest {    @Test    public void testname() throws Exception {        IEmpDao empDao=new EmpDao();        IEmpDao empDaoProxy=new EmpDaoProxy(empDao);        empDaoProxy.tent();    }}
0 0
原创粉丝点击