- cglib技术
- 添加jar包maven依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--ioc01-core-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<!--ioc01-bean-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<!--ioc01-context-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!--ioc01-expression-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
</dependency>
cglib技术,适用于无接口的使用
通过继承实现的cglib技术要
(1):添加jar包
(2):用法:
Enhance.create(
class, 目标类的对象
InvocationHandler 交叉业务逻辑
)
创建一个类
package springaop01.entity;
/**
* package_name:springaop01.entity
*
* @author:徐亚远 Date:2020/2/19 12:57
* 项目名:springDemo01
* Description:TODO
* Version: 1.0
**/
public class HelloCglib {
public void sayHello(){
System.out.println("你好!");
}
}
书写测试类通过cglib动态代理技术
package springaop01.controller;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.InvocationHandler;
import springaop01.entity.HelloCglib;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Date;
/**
* package_name:springaop01.controller
*
* @author:徐亚远 Date:2020/2/19 12:13
* 项目名:springDemo01
* Description:TODO
* Version: 1.0
**/
public class TestCglibHello {
public static void main(final String [] args){
// 动态代理Cglib技术实现
HelloCglib helloCglib = (HelloCglib) Enhancer.create(
//目标类的实例
HelloCglib.class,
new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
System.out.println("输出日志:start at:"+"["+new Date().getTime() +"]"+"args:"+""+Arrays.toString
(args) +"]");
return method.invoke(new HelloCglib(),args);
}
});
helloCglib.sayHello();
//代理类的对象
System.out.println(helloCglib.getClass());
}
}
测试结果如图: