`
wlh269
  • 浏览: 455692 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring(十一) AOP(四)spring面向切面编程--JDK代理和CGLIB代理

阅读更多
spring对AOP的支持

1、如果目标对象实现了接口,默认会采用JDK的动态代理机制实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现接口,必须使用CGLIB生成代理,spring会自动在CGLIB和JDK动态代理之间切换

4.如何强制使用CGLIB生成代理?
* 添加CGLIB库,SPRING_HOME/lib/cglib/*.jar
* 在spring的配置文件中加入:
<aop:aspectj-autoproxy proxy-target-class="true"/>

JDK代理和CGLIB代理的区别?
* JDK代理只能对实现了接口的类生成代理,而不能针对类
* CGLIB是针对类实现代理的,主要对指定的类生成一个子类,并覆盖其中的方法,
  因为是继承,所以不能使用final来修饰类或方法<aop:aspectj-autoproxy proxy-target-class="true"/>


在什么情况下,Spring使用CGLIB做代理?
1.在AOP(二)基础上如果将UserManagerImpl.java修改为如下,则Spring会自动使用CGLIB做动态代理;
package com.wlh.spring;

 //public class UserManagerImpl implements UserManager {
 public class UserManagerImpl{
     //目标类不实现接口的情况下,Spring自动使用CGLIB做代理
	public void addUser(String username, String pwd) {
      System.out.println("====addUser()=====");
	}

	public void delUser(int id) {
		 System.out.println("====delUser()=====");
	}

	public void findUser(int id) {
		 System.out.println("====findUser()=====");
	}

	public void updateUser(int id, String username, String pwd) {
		 System.out.println("====updateUser()=====");
	}

}





2、如果UserManagerImpl.java类步变,仍然实现了接口UserManager,然后我们在配置文件中,添加一个标签:<aop:aspectj-autoproxy proxy-target-class="true"/>
Spring也会使用CGLIB做代理类:

<!--<aop:aspectj-autoproxy proxy-target-class="true"/> 支持CGLIB代理 -->

<bean id="userManager" class="com.wlh.spring.UserManagerImpl" />

<bean id="securityHandler" class="com.wlh.spring.SecurityHandler" /><!-- 切面类 -->
<aop:config>
<aop:aspect id="securityAspect" ref="securityHandler"><!-- 引用切面类 -->
<!-- 表达式方法声明匹配被切入的类及其方法 -->
<aop:pointcut id="applyMethod"
expression="execution(* com.wlh.spring.*.add*(..)) || execution(* com.wlh.spring.*.del*(..))" />
<aop:before pointcut-ref="applyMethod"
method="checkSecurity" /><!-- 声明切面类的要切入方法 -->
</aop:aspect>
</aop:config>
分享到:
评论
2 楼 wlh269 2009-02-05  
njuptsoz 写道

原来是这样,受教了,谢谢

不客气,希望多交流!
1 楼 njuptsoz 2009-02-05  
原来是这样,受教了,谢谢

相关推荐

    Spring-AOP-JDK动态代理

    在Java编程领域,Spring框架是应用最广泛的轻量级开源框架之一,它提供了一系列强大的功能,包括依赖注入、面向切面编程(AOP)等。本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解...

    spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar

    Spring框架的核心包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入允许组件之间松耦合,而AOP则用于实现跨切面的关注点,如日志记录、事务管理等。这两个jar...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    在Java开发领域,Spring框架是不可或缺的重要组成部分,它为开发者提供了强大的依赖注入、AOP(面向切面编程)以及各种企业级服务。标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是...

    Spring框架+Spring工作原理+AOP面向切面编程+JDK代理+Cglib代理

    1. **Spring Core**:提供了Spring框架的基础,包括依赖注入(DI)和面向切面编程(AOP)的基础支持。它是所有其他模块的基础。 2. **Spring AOP**:支持面向切面编程,允许开发者定义方法拦截器和切入点,从而分离...

    Spring AOP面向切面三种实现

    在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...

    spring使用动态代理面向切面编程(AOP) xml

    在Spring框架中,面向切面编程(AOP)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。本篇文章将深入探讨如何使用Spring的动态代理机制实现AOP...

    Spring源码缺失的spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar

    在Spring框架中,CGlib主要被用于AOP(面向切面编程)的代理机制。当目标对象不支持接口时(即为非接口类型),Spring会使用CGlib创建目标对象的子类,并在子类中织入切面逻辑。CGlib通过字节码技术动态生成一个类的...

    Spring框架中JDK动态代理和cglib动态代理

    在 Spring AOP 框架中,我们可以使用 Pointcut 和 Advice 来实现切面编程。Pointcut 用于定义哪些方法需要被代理,而 Advice 用于定义代理的逻辑。 Spring AOP 框架会根据 Pointcut 和 Advice 生成一个代理类,然后...

    AOP之JDK动态代理和CGLib动态代理

    在Java世界中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种设计模式,它允许程序员在不修改源代码的情况下,插入新的行为或增强已有功能。Spring框架是AOP实现的一个典范,它提供了两种主要的动态...

    面向切面编程

    例如,Spring框架中的AOP支持基于JDK的动态代理和CGLIB动态代理。 #### 使用场景示例 假设有一个Web应用,需要对某些URL实施权限验证,对于不需要验证的URL,可以直接访问;而对于需要验证的URL,则只有具有相应...

    spring AOP切面编程

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...

    Spring Aop面向切面的java代码

    总结一下,Spring AOP提供了JDK动态代理和CGLIB代理两种方式来实现面向切面编程,通过这两种方式,我们可以方便地在不修改原始业务代码的前提下,添加额外的功能,如日志、事务控制等。`SprigAopJdk`和`...

    AOP面向切面编程总结

    AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的面向对象程序设计中,通常会将应用划分为不同的...

    Spring 动态代理和aop切面编程例子

    在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...

    spring_aop_cglib的实现方式

    在Spring AOP(面向切面编程)中,CGLIB是一个重要的动态代理库,它用于在运行时创建子类以实现对目标对象的代理。CGLIB是针对那些不支持接口代理(例如Java中的final类)的情况而设计的。下面我们将深入探讨Spring ...

    spring之AOP(动态代理)

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...

    Java Spring AOP 面向切面编程的4种实现

    Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    Spring AOP 是一种面向切面编程的技术,它允许我们在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行增强。在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态...

    16.2 Spring框架-AOP面向切面编程

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要组成部分,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、性能监控等。在传统的OOP(面向对象编程)中...

    CGLIB需要的asm-2.2.3.jar和cglib-nodep-2.2.jar

    2. **AOP(面向切面编程)**:CGLIB常被用于实现AOP框架,例如Spring AOP。在Spring中,如果没有使用接口,那么默认会使用CGLIB来创建代理,以便在方法调用前后插入切面逻辑。 3. **性能优化**:由于CGLIB是基于...

Global site tag (gtag.js) - Google Analytics