zoukankan      html  css  js  c++  java
  • 设计模式——代理

    代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。

    按照代理的创建时期,代理类可以分为两种。

    静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。

    动态代理:在程序运行时,运用反射机制动态创建而成。

    代理类图:

    Spring中实现AOP

    1.   AOP代理对象

    注意在实现代理模式的时候要对目标对象编写代理类,目标对象必须实现了某些接口才行。当要对没有实现接口的目标类进行实现代理时可以用Spring的lib包中的cglib包实现:

    编写的代理工厂类为

     

    public class CglibProxyFactory implements MethodInterceptor {
    	private Object targetObject;
    
    	public Object createProxyInstance(Object targetObject) {
    		this.targetObject = targetObject;
    		Enhancer enhancer = new Enhancer();
    		enhancer.setSuperclass(this.targetObject.getClass());
    		enhancer.setCallback(this);
    		return enhancer.create();
    	}
    
    	@Override
    	public Object intercept(Object arg0, Method arg1, Object[] arg2,
    			MethodProxy arg3) throws Throwable {
    		PersonServiceBean bean = (PersonServiceBean) this.targetObject;
    		Object result = null;
    		if (bean.getUser() != null) {
    			result = arg3.invoke(targetObject, arg2);
    		}
    		return result;
    	}
    }
    

      

    2.   spring利用注解进行实现AOP

    首先要编写好目标对象,也就是bean,然后实现好相应的切面对象;在beans.xml中配置好两者的bean属性。关键的是在切面对象中实现注解的标识:

     



    3.   spring利用xml配置的方式实现AOP,利用xml进行的配置除了xml中的配置不同外,其他的Java类相似

    详细的xml配置为

     


    总体感觉使用xml的配置方式比较好点,在Java类中编写一些注解,看上去别扭,在xml中的配置则显得明了。
  • 相关阅读:
    Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法
    oracle的 分表 详解 -----表分区
    【Spring框架】<mvc:default-servlet-handler/>的作用
    git revert
    log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
    [已解决] java 增加 ALPN支持
    [已解决] 快速理解RSA算法
    [已解决] C3p0连接配置
    [已解决] git 重命名文件夹
    [已解决] No syntax specified for the proto file : xxx.proto
  • 原文地址:https://www.cnblogs.com/lcqBlogs/p/2392370.html
Copyright © 2011-2022 走看看