用kenoAspect去切 A1335_ValidPrize类的中volidVO,doaction方法
cglib的jar包
<!-- cglib统计用 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<!-- cglib -->
spring 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
<!-- 目标类 -->
<bean id="A1335_ValidPrize" class="com.joyveb.state.action.keno.A1335_ValidPrize"></bean>
<!-- 切类 -->
<bean id="kenoAspect" class="com.joyveb.state.action.keno.aspect.KenoAspect">
</bean>
<aop:config>
<aop:aspect id="aspect" ref="kenoAspect">
<aop:pointcut expression="execution(* com.joyveb.state.action.keno.A1335_ValidPrize.volidVO(..))" id="validprizeVO"/>
<aop:after method="volidVO" pointcut-ref="validprizeVO"/>
<aop:pointcut expression="execution(* com.joyveb.state.action.keno.A1335_ValidPrize.doAction(..))" id="validprizeDoAction"/>
<aop:before method="doAction" pointcut-ref="validprizeDoAction"/>
</aop:aspect>
</aop:config>
自己可以写类 做测试
之前按网上说的加了个这个
<
bean
id
="
proxy
"
class
="
org.springframework.aop.framework.ProxyFactoryBean
"
>
-
<
property
name
="
proxyTargetClass
"
>
<
value
>
true
</
value
>
</
property
>
-
<
property
name
="
target
"
>
<
bean
class
="
com.joyveb.state.action.keno.aspect.
kenoAspect"
/>
</
property
>
</
bean
>
只有 <aop:after 可以用 但之后就抛异常 不知道 问什么 删了就好了
分享到:
相关推荐
在Spring AOP中,CGLIB代理的主要优点是它不需要目标对象实现任何接口,因此对于没有接口或者接口较少的类,CGLIB是一种很好的选择。然而,它的缺点是生成的代理类会稍微增加内存占用,且由于是通过继承实现,如果...
而CGLIB代理则适用于无接口或非接口实现类,它通过字节码技术创建目标类的子类来实现代理。 2. **AspectJ切面** AspectJ是AOP的完整实现,比Spring的代理更强大。它可以编译时织入或加载时织入切面,提供更细粒度...
在Spring中,可以通过实现`org.aspectj.lang.annotation.Aspect`接口或者使用注解`@Aspect`来定义一个切面类。 2. **定义通知(Advice)**:通知是切面在特定连接点(Join Point,如方法调用)执行的代码。Spring...
- 如果目标对象没有实现任何接口,Spring会使用CGLIB库创建一个目标对象的子类,并在子类中插入通知代码。 - CGLIB是通过字节码生成技术动态创建子类,因此无需目标对象实现接口。 ### 3. 自定义类加载器 在某些...
当目标类没有实现接口或者为了性能考虑,通常会选择CGLIB作为代理机制。 CGLIB是一个强大的高性能的代码生成库,它在许多AOP的实现中被用到,比如Spring AOP。CGLIB使用字节码技术为一个类创建子类,并在子类中拦截...
JDK代理适用于那些实现了接口的类,而CGLIB代理则适用于没有实现接口的类。 引介(Introduction)是Spring AOP的一个特性,允许在通知对象中声明并实现它们原本未实现的额外接口。通过`@DeclareParents`注解可以...
如果被代理的类没有实现接口,Spring AOP会采用CGLIB来生成代理对象。CGLIB(Code Generation Library)是一个开源的代码生成库,它允许运行时在内存中动态生成类和对象。 在Spring AOP中,我们通常使用@Aspect注解...
在Spring中,当一个类没有实现接口时,Spring会使用CGLIB来创建代理对象,以便在不修改原有代码的情况下,为对象添加额外的功能,如事务管理、性能监控等。CGLIB的repack版本是对原始CGLIB库的重新打包,目的是为了...
在Spring中,当目标对象不支持代理(如final类)或者没有接口时,Spring会使用CGLIB来生成代理对象,实现对目标对象的拦截和增强。"spring-cglib-repack-3.2.5.jar"是Spring项目对CGLIB的一个打包版本,方便在阅读...
JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或不希望使用接口的类。代理对象在调用目标方法时会执行切面逻辑。 2. **织入**:织入是将切面与应用程序代码结合的过程。Spring支持三种织入时机:编译时、...
CGLIB 动态代理则是在运行时生成一个目标对象的子类,如果目标对象没有实现接口,Spring 将使用 CGLIB 作为默认的代理方式。CGLIB 通过 `net.sf.cglib.proxy.Enhancer` 和 `Callback` 来创建代理对象。`Enhancer` 是...
在Spring AOP(面向切面编程)中,当无法为一个类创建代理(例如,因为该类没有接口)时,CGILib就派上了用场。它通过动态生成一个类的子类,并在其中插入拦截器方法,以此来实现对原始类方法的增强。Spring使用...
2. CGLIB代理:如果目标对象没有实现接口,Spring会使用CGLIB库动态生成一个子类,并在子类中插入通知。 三、AOP的配置与使用 1. 配置方式:可以通过XML配置或注解方式进行。XML配置中,`<aop:config>`定义切面,`...
- 如果目标类没有实现接口,Spring AOP会使用CGLIB代理。CGLIB是一个强大的高性能的代码生成库,它会在运行期动态生成子类并覆盖父类的方法来实现AOP的功能。 **4. 配置Spring AOP** 在Spring XML配置文件中,我们...
总的来说,Spring AOP通过这四个关键的Jar包,结合AspectJ的强大功能和CGLIB的代理机制,为开发者提供了强大的面向切面编程支持,使得我们可以在不侵入原有业务代码的情况下,实现跨切面的关注点管理。
当Spring框架在进行AOP代理时,如果目标类没有实现接口,它会选择使用CGLIB来创建一个子类并动态地插入拦截器方法。CGLIB通过字节码操作技术生成代理类,这样就可以在运行时扩展或修改已有类的功能,而无需修改原始...
2. **CGLIB动态代理**:如果目标类没有实现接口,Spring会使用CGLIB库创建一个目标类的子类,子类覆盖目标类的方法并在方法调用前后插入通知。CGLIB代理提供了更广泛的应用场景,但相比JDK动态代理,它的性能稍差。 ...
CGLIB使得Spring能够对非接口类进行AOP代理,扩大了面向切面编程的应用范围。Objenesis则为Spring提供了快速创建对象的能力,尤其在测试环境中,避免了对复杂初始化逻辑的依赖。 在实际项目中,当开发者引入Spring...
在Spring AOP中,如果目标类没有实现接口,Spring会使用CGLIB创建一个代理对象来实现切面功能。CGLIB-nodep是无依赖版本,不包含ASM库,但通常Spring会自行处理ASM的依赖。 5. **aopalliance-1.0.jar**:AOP ...
在Spring框架中,CGLIB被广泛用于AOP(面向切面编程)代理。当目标对象不支持接口或者为了提高性能时,Spring会使用CGLIB代理来创建代理对象。`spring-cglib-repack-3.2.6.jar` 包含了CGLIB库的重新打包版本,可能包含...