好久没学习spring了,今天接着学习。
接着这上面的例子,在上面的例子中我们的UserManagerImpl类是实现了UserManager接口,如果UserManagerImpl没有实现任何接口要怎么办呢?应为创建代理对象时我们需要指定接口的。
Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),
this);
由于没有时间接口,因此我们是不能这样创建代理接口的,这是我们需要借助第三方包来实现。在spring中提供了cglib-nodep-2.1_3.jar包。我们通过cglib创建代理对象。
下面就通过实例演示通过cglib创建代理对象。
首先创建CGlibProxyFactory,实现MethodInterceptor接口,接口中有一个intercept方法,当代理对象的方法被调用时会调用这个方法。
package com.szy.spring;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class CGlibProxyFactory implements MethodInterceptor
{
private Object targetObject;
public Object newProxy(Object targetObject)
{
this.targetObject=targetObject;
Enhancer enhancer=new Enhancer();
enhancer.setSuperclass(this.targetObject.getClass());
enhancer.setCallback(this);
//返回代理对象
return enhancer.create();
}
/**
* proxy 带来对象本身
* method 被拦截到的方法
* args 方法的参数
* methodProxy 方法的代理对象
*/
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable
{
checkSecurity();
Object ret=null;
try
{
//调用目标对象的真实方法
ret=method.invoke(this.targetObject, args);
//ret接受存在的返回值,不存在返回值则为Null
} catch (Exception e)
{
e.printStackTrace();
}
return ret;
}
public void checkSecurity()
{
System.out.println("--------UserManagerImpl.checkSecurity()----------");
}
}
其实整个代码很前面的很相似,只是创建代理对象的方法不一样。
测试代码:
CGlibProxyFactory factory=new CGlibProxyFactory();
//创建代理对象,这是这个代理对象是UserManagerImpl的子类
UserManagerImpl userManager=(UserManagerImpl)factory.newProxy(new UserManagerImpl());
userManager.addUser("coolszy", "kuka");
上面演示的几个事例是不借助与任何框架的情况下实现AOP的方法。
分享到:
相关推荐
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
**Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...
在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...
以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...
总结,SSH笔记-AOP涵盖了Spring中AOP的核心概念,包括动态代理技术的使用、基于注解的AOP配置以及如何在XML中声明切面。学习和掌握这些内容,能够帮助开发者更好地利用Spring框架实现代码的解耦和模块化,提高系统的...
在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...
### Spring学习笔记:深入理解AOP与Annotation驱动的动态代理 #### 核心知识点解析: 在探讨Spring框架中AOP(面向切面编程)及基于Annotation的动态代理之前,我们首先需要了解AOP的基本概念及其在Spring中的实现...
在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...
这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...
以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...
【标题】"Spring学习笔记(十三)"主要涉及的是Spring框架中的AOP(面向切面编程)部分,特别是关于CGLIB动态代理的实现。在Spring中,AOP是一种强大的编程模型,它允许开发者定义“切面”,即关注点的模块化,如日志...
在本篇Spring学习笔记中,我们将深入探讨Spring框架的核心特性,包括依赖注入(Dependency Injection,DI)、AOP(面向切面编程)以及Spring的源码解析,同时也会介绍一些实用的开发工具。通过学习这些内容,我们...
【标题】"Spring学习笔记(十四)"主要涵盖了Spring框架中的AOP(面向切面编程)和CGLIB库的应用,这两个知识点在Java开发中尤为重要,尤其是对于构建灵活、可维护的大型企业级应用。 首先,Spring框架是Java开发中...
总的来说,"Spring学习笔记(八)"聚焦于Spring AOP的动态代理机制,通过理论讲解和代码示例,帮助开发者理解并掌握这一强大的功能,从而在实际项目中更好地实现解耦和代码复用。同时,通过源码分析,可以更深入地了解...
《Spring技术内幕 学习笔记》是一份深入探讨Spring框架核心机制的学习资料,结合作者zzc1684在iteye博客上的博文,我们可以从中学习到Spring框架的多个重要知识点。Spring作为Java企业级应用开发的基石,其设计思想...
这个"spring学习笔记,包括源码学习"的资料很可能包含了一系列关于Spring框架的核心概念、配置、使用方法以及深入源码的解析。 首先,让我们来了解一下Spring框架的基础知识。Spring的核心特性是依赖注入,它允许...
在Spring中,AOP通过代理模式实现,分为JDK动态代理和CGLIB代理。 1. **切面(Aspect)**:定义了关注点的模块化,包含通知(Advice)和切点(Pointcut)。 2. **通知(Advice)**:在特定连接点执行的代码,如前置...
本篇学习笔记详细介绍了面向切面编程的基本概念及其在Spring框架中的应用,特别是在使用JDK动态代理创建代理对象方面给出了具体示例。通过理解和掌握这些知识点,可以帮助开发者更好地利用Spring框架的强大功能,...