亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳細(xì)了解MVC+proxy

 更新時(shí)間:2021年07月09日 15:19:24   作者:程序dunk  
Java有兩種代理方式,一種是靜態(tài)代理,另一種是動態(tài)代理。對于靜態(tài)代理,其實(shí)就是通過依賴注入,對對象進(jìn)行封裝,不讓外部知道實(shí)現(xiàn)的細(xì)節(jié)。很多 API 就是通過這種形式來封裝的

1、創(chuàng)建業(yè)務(wù)層UserService接口定義需要完成的功能

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

2、創(chuàng)建持久層UserDao接口定義具體的CURD

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

3、完成UserService接口和UserDao的實(shí)現(xiàn)類

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、創(chuàng)建InvocationHandler接口的實(shí)現(xiàn)類

為什么需要這個(gè)接口?

因?yàn)樵陂_發(fā)中,業(yè)務(wù)層可能含有涉及到多步數(shù)據(jù)庫操作,所以這一步需要開啟事務(wù),但是開發(fā)中這樣的情況太多了,所以我們需要面向橫切面編程,創(chuàng)建代理代理,在調(diào)用業(yè)務(wù)層方法時(shí),我們利用jdk動態(tài)代理的增強(qiáng)功能提供事務(wù)。這樣,事務(wù)代碼只用寫一次,但是每次業(yè)務(wù)層方法調(diào)用時(shí),我們都可以使用代理對象去調(diào)用業(yè)務(wù)層方法來開啟事務(wù)。實(shí)現(xiàn)了代碼復(fù)用。

public class UserHandler implements InvocationHandler {

    //動態(tài)創(chuàng)建目標(biāo)對象
    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;
        //增強(qiáng)功能
        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;
    }
}

這里我就用輸出語句代表事務(wù)語句。

5、創(chuàng)建表示層Servlet去完成調(diào)用

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

總結(jié)

本篇文章就到這里了,希望能夠幫助到你,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java入門教程--帶包的類如何編譯與運(yùn)行

    Java入門教程--帶包的類如何編譯與運(yùn)行

    我們一般都是通過IDE(如Eclipse、Intellij Idea,STS等)來開發(fā),調(diào)試java項(xiàng)目。在不借助IDE的情況下,如何編譯、運(yùn)行Java程序。打包編譯時(shí),會自動創(chuàng)建包目錄,不需要自己新建包名文件夾。
    2022-12-12
  • 關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯

    關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯

    Log4j?是Apache為Java提供的日志管理工具。他與System.out.println()的作用相似,用來跟蹤、調(diào)試、維護(hù)程序。這篇文章主要介紹了關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯,需要的朋友可以參考下
    2021-12-12
  • Nacos1.4.0 Windows10單機(jī)模式啟動和集群啟動過程解析

    Nacos1.4.0 Windows10單機(jī)模式啟動和集群啟動過程解析

    這篇文章主要介紹了Nacos1.4.0 Windows10單機(jī)模式啟動和集群啟動,第一次使用nacos,廢話不多說,記錄下自己啟動Nacos遇到的坑,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • SpringMVC整合kinfe4j及問題解決分析

    SpringMVC整合kinfe4j及問題解決分析

    這篇文章主要為大家介紹了SpringMVC整合kinfe4j及問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Leetcode常見鏈表問題及代碼示例

    Leetcode常見鏈表問題及代碼示例

    這篇文章主要介紹了Leetcode常見鏈表問題及代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • springboot?vue項(xiàng)目管理前后端實(shí)現(xiàn)編輯功能

    springboot?vue項(xiàng)目管理前后端實(shí)現(xiàn)編輯功能

    這篇文章主要為大家介紹了springboot?vue項(xiàng)目管理前后端實(shí)現(xiàn)編輯功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁面實(shí)例

    SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁面實(shí)例

    大家好,本篇文章主要講的是SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁面實(shí)例,感興趣的同學(xué)趕快來看一看,對你有幫助的話記得收藏一下
    2022-02-02
  • Java IO流之Properties類的使用

    Java IO流之Properties類的使用

    這篇文章主要介紹了Java IO流之Properties類的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java 通過cmd 調(diào)用命令啟動tomcat的操作

    java 通過cmd 調(diào)用命令啟動tomcat的操作

    這篇文章主要介紹了java 通過cmd 調(diào)用命令啟動tomcat的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • SpringBoot獲取http數(shù)據(jù)、打印HTTP參數(shù)的4種方式

    SpringBoot獲取http數(shù)據(jù)、打印HTTP參數(shù)的4種方式

    Java的話本地打斷點(diǎn)可以調(diào)試獲取rest入?yún)?但是在生產(chǎn)環(huán)境可能我們獲取入?yún)ⅲ℉ttp?header/parameter)可能就沒有那么的輕松了,所以本文給大家介紹了SpringBoot獲取http數(shù)據(jù)、打印HTTP參數(shù)的4種方式,需要的朋友可以參考下
    2024-03-03

最新評論