您好,登錄后才能下訂單哦!
這篇文章主要講解了“MVC+proxy的原理及使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MVC+proxy的原理及使用方法”吧!
1、創建業務層UserService接口定義需要完成的功能
2、創建持久層UserDao接口定義具體的CURD
3、完成UserService接口和UserDao的實現類
4、創建InvocationHandler接口的實現類
5、創建表示層Servlet去完成調用
總結
/** * 創建目標接口,定義目標接口要完成的功能 */ public interface UserService { boolean save(User user); }
/** * 創建目標接口,定義目標接口要完成的功能 */ public interface UserService { boolean save(User user); }
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; } }
為什么需要這個接口?
因為在開發中,業務層可能含有涉及到多步數據庫操作,所以這一步需要開啟事務,但是開發中這樣的情況太多了,所以我們需要面向橫切面編程,創建代理代理,在調用業務層方法時,我們利用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; } }
這里我就用輸出語句代表事務語句。
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的原理及使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。