91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MVC+proxy的原理及使用方法

發布時間:2021-07-09 18:26:52 來源:億速云 閱讀:137 作者:chen 欄目:開發技術

這篇文章主要講解了“MVC+proxy的原理及使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MVC+proxy的原理及使用方法”吧!

目錄
  • 1、創建業務層UserService接口定義需要完成的功能

  • 2、創建持久層UserDao接口定義具體的CURD

  • 3、完成UserService接口和UserDao的實現類

  • 4、創建InvocationHandler接口的實現類

  • 5、創建表示層Servlet去完成調用

  • 總結

1、創建業務層UserService接口定義需要完成的功能

/**
 * 創建目標接口,定義目標接口要完成的功能
 */
public interface UserService {
    boolean save(User user);
}

2、創建持久層UserDao接口定義具體的CURD

/**
 * 創建目標接口,定義目標接口要完成的功能
 */
public interface UserService {
    boolean save(User user);
}

3、完成UserService接口和UserDao的實現類

public class UserServiceImpl implements UserService {
    private UserDao dao=new UserDaoImpl();
    @Override
    public boolean save(User user) {
        boolean success=false;
        success=dao.insert(user);
        return success;
    }
}

這里省略具體的JDBC代碼

public class UserDaoImpl implements UserDao {
    @Override
    public boolean insert(User user) {
        System.out.println("insert into t_user (username,password)values('"+user.getUsername()+"','"+user.getPassword()+"')");
        return true;
    }
}

4、創建InvocationHandler接口的實現類

為什么需要這個接口?

因為在開發中,業務層可能含有涉及到多步數據庫操作,所以這一步需要開啟事務,但是開發中這樣的情況太多了,所以我們需要面向橫切面編程,創建代理代理,在調用業務層方法時,我們利用jdk動態代理的增強功能提供事務。這樣,事務代碼只用寫一次,但是每次業務層方法調用時,我們都可以使用代理對象去調用業務層方法來開啟事務。實現了代碼復用。

public class UserHandler implements InvocationHandler {

    //動態創建目標對象
    Object target=null;
    public UserHandler(Object target){
        this.target=target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //返回值
        Object result=null;
        //增強功能
        System.out.println("begin Transaction.....");
        result=result=method.invoke(target,args);
        System.out.println("commit Transaction.....");
        System.out.println("rollback Transaction.....");
        System.out.println("end Transaction.....");
        //返回值
        return result;
    }
}

這里我就用輸出語句代表事務語句。

5、創建表示層Servlet去完成調用

public class UserSaveServlet {
    public static void main(String[] args) throws Exception {
        //需要調用的目標類
        Class c= UserServiceImpl.class;
        Object obj = c.newInstance();
        //獲取該類的類加載器
        ClassLoader loader = obj.getClass().getClassLoader();
        //目標對象實現的接口
        Class<?>[] interfaces=obj.getClass().getInterfaces();
        //獲取InvocationHandler對象
        InvocationHandler handler=new UserHandler(obj);
        //創建代理對象
        //將返回值轉為接口類型
        UserService service=(UserService)Proxy.newProxyInstance(loader,interfaces,handler);
        boolean success=service.save(new User("張三","123456"));
        System.out.println(success?"保存成功":"保存失敗");
    }
}

MVC+proxy的原理及使用方法

感謝各位的閱讀,以上就是“MVC+proxy的原理及使用方法”的內容了,經過本文的學習后,相信大家對MVC+proxy的原理及使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜丰县| 永平县| 龙江县| 封开县| 泌阳县| 河间市| 隆子县| 禹州市| 邢台县| 白朗县| 敖汉旗| 安顺市| 拉孜县| 辽宁省| 宁化县| 沙坪坝区| 密云县| 栾川县| 余庆县| 沧源| 邯郸市| 马边| 延庆县| 深水埗区| 汽车| 河间市| 墨玉县| 马山县| 驻马店市| 武平县| 大兴区| 大关县| 咸丰县| 靖江市| 河西区| 阳东县| 迭部县| 阿拉善右旗| 南通市| 红原县| 砚山县|