Dynamic Agent를 통한 DataSource

9206 단어 JavaWeb
DataSource를 실현하는 것은 사실 매우 간단하다.list 집합을 만들고 여러 개의connection을 저장한다.connection마다 close 방법을 다시 쓴다.실제로 닫지 않고list 집합으로 재생한다.이것은 동적 프록시 해결 코드를 사용하여 다음과 같다.

public class MyDataSource implements DataSource {

    private String username;
    private String password;
    private String url;
    private String driverClassName;

    private List<Connection> list = new ArrayList<Connection>();

    private boolean flag = true;

    private void init() throws ClassNotFoundException {
        flag = false;
        Class.forName(driverClassName);
        for(int i = 0; i < 5; i++) {
            Connection proxy2 = (Connection) Proxy.newProxyInstance(
                //    
                Thread.currentThread().getContextClassLoader(),
                //  
                new Class[]{Connection.class},
                //  
                (proxy, method, args) -> {
                //  close  
                if(method.getName().equals("close")) {
                    list.add((Connection)proxy);
                    return null;
                } else {
                    //      
                    return method.invoke(DriverManager.getConnection(url, username, password), args);
                }
            });
            list.add(proxy2);
        }
    }

    @Override
    public Connection getConnection() {
        if(flag) {
            try {
                init();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        if(list.size() > 0) {
            return list.remove(0);
        }
        throw new RuntimeException();
    }
}


좋은 웹페이지 즐겨찾기