首页 > 其他分享 >javeee spring cglib动态代理

javeee spring cglib动态代理

时间:2023-09-03 13:06:23浏览次数:32  
标签:对象 spring Object 代理 cglib javeee import public


cglib动态代理

依赖

<dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib-nodep</artifactId>
      <version>3.2.4</version>
    </dependency>

代理类

package com.test.cglibProxy;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;
import java.util.Date;

//代理对象生成器
public class CglibProxy  implements MethodInterceptor {

    //创建目标对象的代理对象 并且拦截目标对象中的方法
    Enhancer enhancer=new Enhancer();

    public Object getProxy(Class clazz)
    {
         //设置目标对象的字节码文件为代理对象的父类
         enhancer.setSuperclass(clazz);
         //设置回调函数  目的是调用intercept方法
         enhancer.setCallback(this);
         //根据传递过去的参数 创建一个代理对象 返回
         return enhancer.create();
    }

    //重写 拦截了目标方法以后 做什么事情
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

        System.out.println("方法执行前:"+new Date());
        Object result= methodProxy.invokeSuper(o,objects);
        System.out.println("方法执行后:"+new Date());
        return result;
    }
}

目标类

package com.test.cglibProxy;

//目标类
public class UsersService {

    public void insert() {
        System.out.println("添加用户");
    }
}

测试

package com.test.cglibProxy;

import org.junit.Test;

public class TestCglibProxy {

    @Test
    public void  test()
    {
        CglibProxy cglibProxy=new CglibProxy();

        //创建一个代理对象 用 目标对象的类型来接收(子类对象可以赋给父类引用)
        UsersService usersServiceProxy=(UsersService)cglibProxy.getProxy(UsersService.class);

        //调用的是代理对象的方法
        usersServiceProxy.insert();
    }
}


标签:对象,spring,Object,代理,cglib,javeee,import,public
From: https://blog.51cto.com/u_15295225/7339486

相关文章

  • javaee spring依赖注入之spel方式
    spring依赖注入之spel方式<dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.18.RELEASE</version></dependency>packagecom.test.pojo;im......
  • idea启动项目报错Error:(5, 52) java: 程序包org.springframework.beans.factory.anno
    idea启动项目报错Error:(5,52)java:程序包org.springframework.beans.factory.annotation不存在IDEA启动项目报错ERROR:(5,52)JAVA:程序包ORG.SPRINGFRAMEWORK.BEANS.FACTORY.ANNOTATION不存在去IDEA下查找maven选项:如果还不行,则继续选择下面的runner,勾选deleteIDEbuild......
  • springboot - 整合redis
    1.引入pom依赖<!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--fastjson序列化器--><dependency><grou......
  • javaee spring 测试aop 切面
    切面类packagecom.test.advice;importorg.aspectj.lang.ProceedingJoinPoint;//增强类publicclassMyAdvice{//将这个增强方法切入到service层的add方法前publicvoidbefore(){System.out.println("添加用户之前");}}目标类packag......
  • javaee spring 静态代理
    静态代理packagecom.test.staticProxy;publicinterfaceIUsersService{publicvoidinsert();}packagecom.test.staticProxy;//目标类publicclassUsersServiceimplementsIUsersService{@Overridepublicvoidinsert(){System.out.print......
  • javaee spring jdbc 查询方法
    javaeespringjdbc查询方法packagecom.test.dao.impl;importcom.test.dao.IUsersDao;importcom.test.pojo.Users;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.jdbc......
  • javaee spring jdk动态代理
    jdk动态代理packagecom.test.jdkProxy;publicinterfaceIUsersService{publicvoidinsert();}packagecom.test.jdkProxy;//目标类publicclassUsersServiceimplementsIUsersService{@Overridepublicvoidinsert(){System.out.println(&qu......
  • javaee spring注解设置单例模式和懒加载模式
    @Lazy懒加载@Scope(scopeName=“prototype”)设置多例模式,不加默认单例模式@Lazy@Component@Scope(scopeName="prototype")publicclassDrink{@Value("橙汁")privateStringname;@Value("半糖")privateStringsugar;@Value(&quo......
  • javaee spring 自动注入,如果满足条件的类有多个如何区别
    如图IDrinkDao有两个实现类方法一方法二@Resource(name=“对象名”)@Resource(name="oracleDrinkDao")privateIDrinkDaodrinkDao;......
  • javaee spring 用注解的方式实现ioc
    spring用注解的方式实现iocspring核心依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http:/......