spring之Aop的静态代理

代理(proxy)是一种设计模式,提供了对目标对象的访问方式,即通过代理访问目标对象。这样好处:可以在目标对象实现的基础上,增强额外的功能。(扩展目标对象的功能)

  1.首先定义一个接口类:

package a_static;
//接口
public interface IUserDao {
    void save();

}

  2.定义一个目标对象类:

package a_static;
/**
 * 目标对象
 * @author Administrator
 *
 */
public class UserDao implements IUserDao{

    public void save() {
        // TODO Auto-generated method stub
        System.out.println("-----已经保存数据------");

    }

}

  3.定义一个代理对象类:

package a_static;
/**
 * 代理对象(静态代理)
 *  代理对象,要实现与目标对象一样的接口
 * @author Administrator
 *
 */
public class UserDaoProxy implements IUserDao{
    //接受保存目标对象
    private IUserDao target;
    public  UserDaoProxy(IUserDao target){
        this.target=target;
    }

    public void save() {
        // TODO Auto-generated method stub
        System.out.println("开始事物");
        target.save();
        System.out.println("开始事物");

    }

}

  4.定义一个测试类:

package a_static;

public class App {
    public static void main(String[] args) {
        // 目标对象
        IUserDao target=new UserDao();
        // 代理
        IUserDao proxy=new UserDaoProxy(target);
        proxy.save(); // 执行的是,代理的方法
    }

}

总结:

静态代理的优点:可以做到在不修目标对象功能的前提下,对目标对象功能扩展

缺点:1.因为代理对象,需要与对象实现一样的接口。所以有很多代理类,类太多

2.一旦接口增加方法,目标对象与代理对象都要维护

解决:可以使用动态代理

    

时间: 2024-10-14 20:15:39

spring之Aop的静态代理的相关文章

AOP、静态代理、JDK动态代理、CGLIB动态代理、Spring实现AOP、IOC+AOP

一.为什么需要代理模式 假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: 1 package com.zhangguo.Spring041.aop01; 2 3 public class Math { 4 //加 5 public int add(int n1,int n2){ 6 int result=n1+n2; 7 System.out.println(n1+"+"+n2+"="+result); 8 return result; 9 } 1

spring(AOP,基于代理AOP实现,自动代理AOP实现,基于AspectJAOP[注解]实现)

----------------AOP------------------ ----------------------基于代理的AOP实现------------------------------------- 1.创建接口类,实现类 2.引入spring支持,勾选AOP支持 3.创建实现类的bean,代理类的bean 4.创建代理类并实现一下两个接口 5.定义切入点 6.定义通知(绑定一个代理),advice--->代理类,pointcut----->切入点 7.定义代理工厂 targe

AOP从静态代理到动态代理 Emit实现

[前言] AOP为Aspect Oriented Programming的缩写,意思是面向切面编程的技术. 何为切面? 一个和业务没有任何耦合相关的代码段,诸如:调用日志,发送邮件,甚至路由分发.一切能为代码所有且能和代码充分解耦的代码都可以作为一个业务代码的切面. 我们为什么要AOP? 那我们从一 ... 653rai悼抑戳眯陨桨<http://baobao.baidu.com/question/ba4ad4dffdea7da838c2d08783ca1801.html?=D>435rqv示

Spring AOP实验之静态代理

1 AOP的概念和原理 1.1 AOP原理 AOP(Aspect Oriented Programming),也就是面向方面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns,例如,所有大中型应用都要涉及到的持久化管理(Persistent).事务管理(Transaction Management).安全

AOP静态代理解析1-标签解析

AOP静态代理使用示例见Spring的LoadTimeWeaver(代码织入) Instrumentation使用示例见java.lang.instrument使用 AOP的静态代理主要是在虚拟机启动时通过改变目标对象字节码的方式来完成对目标对象的增强,它与动态代理相比具有更高的效率,因为在动态代理调用的过程中,还需要一个动态创建代理类并代理目标对象的步骤,而静态代理则是在启动时便完成了字节码增强,当系统再次调用目标类时与调用正常的类并无差别,所以在效率上会相对高些. AspectJ所做的事 在

spring(AOP)静态代理

1.定义抽象主题接口,假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: 2.主题类,算术类,实现抽象接口. 3.代理类 4.测试运行 5.总结: 静态代理的优点:解决了"开闭原则(OCP)"的问题,解决了"依赖倒转(DIP)"的问题,解决了"单一职责(SRP)"的问题. 静态代理的缺点:如果项目中有多个类,则需要编写多个代理类,工作量大,不好修改,不好维护,不能应对变化.

【设计模式】代理模式:静态代理,动态代理,spring aop

代理模式分为静态代理和动态代理.我们拿链家来举例子,我们本人是真实的对象,有真实的业务需求:需要去找房子:链家是中介,是代理类,他来帮我执行找房子的这个操作. 静态代理: 1.实现一个接口 public interface SearchHome { public void search(); } 2.构建实现接口的委托类 public class Master implements SearchHome { @Override public void search() { System.out.

Spring框架_代理模式(静态代理,动态代理,cglib代理)

共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下:                                      用户库jar包,需要手动发布到tomcat. (每次新建项目) 3) 重新发布项目 * 配置文件错误 (web.xml / struts.xml /bean.xml /hibernate.xml / *.hbm.xml) 明确的提示 * 端口占用 * we

Web项目中静态代理和动态代理为基础的面向切面编程AOP

本来每天更新的,我一般喜欢夜里过了十二点的时候发文章,结果难道是愚人节吗?学校的网也很有意思,断了,把我给耍了...好吧-开始今天的话题AOP.AOP太重要了,所以放到第二篇文章来谈这个话题,AOP是Spring中的重要概念.如果这个不理解Web开发中的三大框架的原理,那就呵呵了.时常听到同学和网友议论Web程序员大部分时间都是在考皮XML配置,我当时听到也是醉了,所以我要用心学习Web,其实这里面蕴含的设计模式.算法.架构思想在源码中体现的淋漓尽致啊,一个大宝库竟然视而不见可惜了.下面就一起品