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>
分享到:
相关推荐
在Java编程领域,Spring框架是应用最广泛的轻量级开源框架之一,它提供了一系列强大的功能,包括依赖注入、面向切面编程(AOP)等。本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解...
Spring框架的核心包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。依赖注入允许组件之间松耦合,而AOP则用于实现跨切面的关注点,如日志记录、事务管理等。这两个jar...
在Java开发领域,Spring框架是不可或缺的重要组成部分,它为开发者提供了强大的依赖注入、AOP(面向切面编程)以及各种企业级服务。标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是...
1. **Spring Core**:提供了Spring框架的基础,包括依赖注入(DI)和面向切面编程(AOP)的基础支持。它是所有其他模块的基础。 2. **Spring AOP**:支持面向切面编程,允许开发者定义方法拦截器和切入点,从而分离...
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
在Spring框架中,面向切面编程(AOP)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。本篇文章将深入探讨如何使用Spring的动态代理机制实现AOP...
在Spring框架中,CGlib主要被用于AOP(面向切面编程)的代理机制。当目标对象不支持接口时(即为非接口类型),Spring会使用CGlib创建目标对象的子类,并在子类中织入切面逻辑。CGlib通过字节码技术动态生成一个类的...
在 Spring AOP 框架中,我们可以使用 Pointcut 和 Advice 来实现切面编程。Pointcut 用于定义哪些方法需要被代理,而 Advice 用于定义代理的逻辑。 Spring AOP 框架会根据 Pointcut 和 Advice 生成一个代理类,然后...
在Java世界中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种设计模式,它允许程序员在不修改源代码的情况下,插入新的行为或增强已有功能。Spring框架是AOP实现的一个典范,它提供了两种主要的动态...
例如,Spring框架中的AOP支持基于JDK的动态代理和CGLIB动态代理。 #### 使用场景示例 假设有一个Web应用,需要对某些URL实施权限验证,对于不需要验证的URL,可以直接访问;而对于需要验证的URL,则只有具有相应...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
总结一下,Spring AOP提供了JDK动态代理和CGLIB代理两种方式来实现面向切面编程,通过这两种方式,我们可以方便地在不修改原始业务代码的前提下,添加额外的功能,如日志、事务控制等。`SprigAopJdk`和`...
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的面向对象程序设计中,通常会将应用划分为不同的...
在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...
在Spring AOP(面向切面编程)中,CGLIB是一个重要的动态代理库,它用于在运行时创建子类以实现对目标对象的代理。CGLIB是针对那些不支持接口代理(例如Java中的final类)的情况而设计的。下面我们将深入探讨Spring ...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
Spring AOP (面向切面编程框架): Spring框架内建了支持动态代理的功能,使用@AspectJ注解可以轻松地创建AOP代理。Spring AOP既支持JDK动态代理也支持CGLIB,会根据目标类是否实现了接口选择合适的底层技术。 Guice ...
Spring AOP 是一种面向切面编程的技术,它允许我们在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行增强。在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态...
面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要组成部分,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、性能监控等。在传统的OOP(面向对象编程)中...
2. **AOP(面向切面编程)**:CGLIB常被用于实现AOP框架,例如Spring AOP。在Spring中,如果没有使用接口,那么默认会使用CGLIB来创建代理,以便在方法调用前后插入切面逻辑。 3. **性能优化**:由于CGLIB是基于...