首页 > 编程语言 >javaee spring jdk动态代理

javaee spring jdk动态代理

时间:2023-09-03 12:36:37浏览次数:38  
标签:jdk spring Object javaee Handler test import public subject


jdk动态代理

package com.test.jdkProxy;

public interface IUsersService {

    public void insert();
}
package com.test.jdkProxy;

//目标类
public class UsersService implements IUsersService {

    @Override
    public void insert() {
        System.out.println("添加用户");
    }
}
package com.test.jdkProxy;

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

//代理类生成器
public class Handler implements InvocationHandler {

    //存放目标对象
    Object subject;

    public Handler(Object subject)
    {
        this.subject=subject;
    }

    //根据传递进来的目标对象 生成一个代理对象 返回
    public static Object bind(Object subject)
    {
        return Proxy.newProxyInstance(Handler.class.getClassLoader(),
                subject.getClass().getInterfaces(),
                new Handler(subject));
    }

    //实现代理类中重写接口中的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        //增强对象
        System.out.println("执行开始的时间:"+new Date());
        //调用目标对象的方法
        Object object=method.invoke(subject,args);

        System.out.println("执行结束的时间:"+new Date());
        return object;
    }
}

测试

package com.test.jdkProxy;

import org.junit.Test;

public class TestJdkProxy {

    //测试jdk自带动态代理生成
    @Test
    public void test()
    {
        IUsersService usersServiceProxy=(IUsersService) Handler.bind(new UsersService());

        usersServiceProxy.insert();

    }
}


标签:jdk,spring,Object,javaee,Handler,test,import,public,subject
From: https://blog.51cto.com/u_15295225/7339384

相关文章

  • 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:/......
  • javaee spring jdbcTemplate的使用
    依赖<?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://maven.apache.org/POM/4.0.......
  • javaee spring 依赖注入之复杂类型的注入数组 集合 等
    spring依赖注入之复杂类型的注入packagecom.test.pojo;importjava.util.List;importjava.util.Map;importjava.util.Properties;/***@description:*@projectName:testSpring*@see:com.test.pojo*@createTime:2023/8/2714:39*/publicclassAA{pri......
  • javaee spring 依赖注入之构造方法注入
    依赖注入之构造方法注入constructor-arg标签指定构造方法的参数packagecom.test.pojo;/***@description:*@projectName:testSpring*@see:com.test.pojo*@author:杨钧博*@createTime:2023/8/2711:18*/publicclassDrink{privateStringname;pri......
  • javaee spring依赖注入之property注入
    spring依赖注入之property注入如下图,如果是基本数据类型,用value属性,如果是对象,则用ref......
  • javaee spring创建对象的三种方式
    方式一调用类的构造方法创建方法二使用静态工厂创建方法三使用非静态工厂创建......
  • javaee spring配置文件bean标签详解
    <beanid="drink_01"name="drink_02"scope="singleton"lazy-init="true"init-method="init"destroy-method="destroy"class="com.test.pojo.Drink"/>scope属性bean标签中添加......
  • Java:SpringBoot实现定时任务Scheduled
    代码示例packagecom.example.demo.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.annotation.EnableScheduling;importorg.springframework.scheduling.annotation.Scheduled;importjava.text.SimpleDate......