Java代理之静态代理

  Java静态代理包括两部分,第一部分是固有内容,第二部分是代理内容。固有内容包括接口和对应的实现类,代理内容是一个新增的类,它实现了固有的接口,即代理类和固有实现类实现的是同一个接口。

  由于代理类需要调用固有实现类的方法,所以代理类需要拥有固有实现类的实例和注入这个实例的构造方法。

  固有内容的代码如下:

package com.zaoren.proxy;
/**
 * 固有接口
 * @author thinkpad
 *
 */
public interface IUserDao {
    void save();
}

 

package com.zaoren.proxy;

public class UserDao implements IUserDao {

    public void save() {
        System.out.println("------------保存user信息");
    }

}

 

  代理内容的代码如下:

package com.zaoren.proxy;

public class UserDaoProxy implements IUserDao {
    
    private IUserDao userDao;
    
    public UserDaoProxy(IUserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
        System.out.println("-----------调用目标对象前处理");
        userDao.save();
        System.out.println("-----------调用目标对象后处理");
    }

}

 

  测试类的代码如下:

package com.zaoren.proxy;

public class MainClass {

    public static void main(String[] args) {
        
        IUserDao userDao = new UserDao();
        UserDaoProxy proxy = new UserDaoProxy(userDao);
        proxy.save();
    }

}

 

  控制台输出结果为:

 

  代理类最重要的特征是,要和被代理的类实现相同的接口。就像现实世界中的情况一样,无论你要找明星做任何事情,你都可以去找他的代理人。

 

  静态代理有什么作用呢?网上的答案大多是可以扩展被代理的类的内容,但是我们不使用代理方式,直接将基础方法再封装一层,不也一样可以达到目的吗?我认为静态代理的主要作用在于,它代理了一个类的所有方法,而不仅仅是某一个方法。静态代理注重整体,比如一个实体类,它有增删改查四个基础方法,我们可以直接建立一个代理类,将这四个基础方法都进行代理,所有调用被代理类的方法,都将改为调用代理类对应的方法,这样整个代码结构将比原来的更佳简洁和谐,代码调用也更加自然易懂。

  总结下来,就是三句话:注重整体、优化代码结构、增强代码可读性。

posted on 2019-11-20 17:09  星辰划过指尖  阅读(158)  评论(0编辑  收藏  举报