星空网 > 软件开发 > Java

Spring代理模式

Spring代理模式大致分为静态代理模式和动态代理模式。

二者区别:

静态代理模式:
灵活性不强;如果有1000个dao;就有1000个代理类;没有做到通用性

静态代理模式:

package StaticProxy;public interface PersonDao {    public void sava();    public void update();}

package StaticProxy;public class PersonDaoimpl implements PersonDao {  public String user = null;  PersonDaoimpl(){}  /**   * @return the user   */  public String getUser() {    return user;  }  /**   * @param user the user to set   */  public void setUser(String user) {    this.user = user;  }    PersonDaoimpl(String user){    this.user = user;  }    @Override  public void sava() {    // TODO Auto-generated method stub    System.out.println("进入方法");  }  @Override  public void update() {    // TODO Auto-generated method stub      }}

package StaticProxy;import JDKProxy.impl.PersonDaoImpl;//静态代理类public class personproxy implements PersonDao{  public PersonDaoimpl persondaoimpl;    public personproxy(PersonDaoimpl persondaoimpl){    this.persondaoimpl = persondaoimpl;  }    @Override  public void sava() {    // TODO Auto-generated method stub    if(persondaoimpl.getUser() != null){      persondaoimpl.sava();    }  }  @Override  public void update() {    // TODO Auto-generated method stub      }  }

测试类:

package StaticProxy;public class Test {    public static void main(String[] args) {    //创建代理类    personproxy pro = new personproxy(new PersonDaoimpl());    pro.sava();  }}

效果图:

Spring代理模式

 

动态代理模式:
JDK : proxy
要求:目标类要有实现接口

package JDKProxy;//接口public interface PersonDao {    public void sava(String name);  public void update(String name);  public String getUsername(String name);}

package JDKProxy.impl;import JDKProxy.PersonDao;public class PersonDaoImpl implements PersonDao {  private String user = null;    /**   * @return the user   */  public String getUser() {    return user;  }  /**   * @param user the user to set   */  public void setUser(String user) {    this.user = user;  }  public PersonDaoImpl(){}    public PersonDaoImpl(String user){    this.user = user;  }    @Override  public String getUsername(String name) {      System.out.println("这是getusername()方法");        return "oooo";  }  @Override  public void sava(String name) {        System.out.println("这是save()方法");      }  @Override  public void update(String name) {        System.out.println("这是update()方法");      }}

package JDKProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import JDKProxy.impl.PersonDaoImpl;/** * 代理工厂 * * @author Administrator * */public class JdkProxyFactory implements InvocationHandler {  private Object targetObject;  /**   * 生成代理对象   *   * @param targetObject   * @return   */  public Object createProxyObject(Object targetObject) {    this.targetObject = targetObject;    // 生成代理对象    // loader:目标类的加载器    // interfaces:目标类的所有接口    // 回调接口类    return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),        targetObject.getClass().getInterfaces(), this);  }  /**   * 代理类回调方法 在调用目标类方法的时候进行回调   * 调用目标类方法时进行拦截   */  @Override//环绕通知  public Object invoke(Object proxy, Method method, Object[] args)      throws Throwable {    PersonDaoImpl persondaoimpl = (PersonDaoImpl) this.targetObject;    Object invoke = null;        try {      //....begin():前置通知      if (persondaoimpl.getUser() != null) {        // 委派目标对象调用方法:调用的目标方法称为连接点        invoke = method.invoke(targetObject, args);      }      //.....commit():后置通知          } catch (Exception e) {      //callback():异常通知    }finally{      //close():最终通知    }        return invoke;  }}

测试:

package JDKProxy;import JDKProxy.impl.PersonDaoImpl;public class JdkProxyTest {  public static void main(String[] args) {    //创建动态代理工厂    JdkProxyFactory jdkproxy = new JdkProxyFactory();    //为目标类创建代理对象    PersonDao persondao = (PersonDao) jdkproxy        .createProxyObject(new PersonDaoImpl(""));    persondao.update("xxx");  }}

效果图;

Spring代理模式

 

您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态。 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦  如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我: 2276292708@qq.com如果需要转载,请注明出处,谢谢!!

  




原标题:Spring代理模式

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

短视频企业号开号难?:https://www.kjdsnews.com/a/1481663.html
怎么给领英群组(LinkedIn Group)内的客户批量发消息添加好友?:https://www.kjdsnews.com/a/1481664.html
跨境电商主体超10万家!出海生意凭什么脱颖而出?:https://www.kjdsnews.com/a/1481665.html
询多多对外贸网站推广的建议!:https://www.kjdsnews.com/a/1481666.html
跨境支付解析:支付方式和特点全面解读:https://www.kjdsnews.com/a/1481667.html
facebook群组营销教程:https://www.kjdsnews.com/a/1481668.html
活动回顾 | 千亚麦佳携手MoonSees呈现精彩亚马逊运营管理课程:https://www.kjdsnews.com/a/1836386.html
生日景点免费 上海景点生日免费景点:https://www.vstour.cn/a/363173.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流