Java学习:反射的应用,依赖加载

简介: 使用反射实现从配置文件加载类以及根据配置文件解决特定依赖关系。配置文件reflect.properties:1AdminDao=reflect.AdminDao1GuestDao=reflect.

使用反射实现从配置文件加载类以及根据配置文件解决特定依赖关系。

配置文件reflect.properties

1AdminDao=reflect.AdminDao
1GuestDao=reflect.GuestDao
1Manager=reflect.Manager
2Manager:AdminDao
2Manager:GuestDao

对应类文件AdminDao

package reflect;

public class AdminDao {
    public AdminDao(){
        System.out.println("成功实例化AdminDao");
    }
    
}

对应类文件GuestDao:

package reflect;

public class GuestDao {
    public GuestDao(){
        System.out.println("成功实例化GuestDao");
    }
}

对应类文件Manager:

package reflect;

public class Manager {
    private AdminDao adminDao = null;
    private GuestDao guestDao = null;
    public Manager() {
        System.out.println("Manage实例化成功");
    }
    public void setAdminDao (Object o) {
        this.adminDao = (AdminDao)o;
        System.out.println("解决adminDao依赖");
    }
    public void setGuestDao (Object o) {
        this.guestDao = (GuestDao)o;
        System.out.println("解决guestDao依赖");
    }
}

反射测试工厂类:

package reflect;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ObjectFactory {
    public static Map<String,Object> map = new HashMap<String,Object>();
    
    static {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("src/reflect.properties"));
            String str = br.readLine();
            while(str != null) {
                char c = str.charAt(0);
                switch (c) {
                    case '1':
                        String[] arr = str.substring(1).split("=");
                        Object o = Class.forName(arr[1]).newInstance();
                        map.put(arr[0].trim().toLowerCase(), o);
                        break;
                    case '2':
                        String[] arr2 = str.substring(1).split(":");
                        Object obj = map.get(arr2[0].trim().toLowerCase());
                        Object fieldObj = map.get(arr2[1].trim().toLowerCase());
                        String methodName = "set"+arr2[1].substring(0, 1).toUpperCase()+arr2[1].substring(1);
                        Method method = obj.getClass().getDeclaredMethod(methodName, Object.class);
                        method.invoke(obj, fieldObj);
                        break;
                }
                str = br.readLine();
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
    public static void main(String[] args) {
        Set<String> set = map.keySet();
        for (String string:set) {
            System.out.println(string+"--"+map.get(string));
        }
    }

}

跑起来结果:

成功实例化AdminDao
成功实例化GuestDao
Manage实例化成功
解决adminDao依赖
解决guestDao依赖
admindao--reflect.AdminDao@10d1f30
manager--reflect.Manager@7aacc1
guestdao--reflect.GuestDao@1e3cabd
相关文章
|
4天前
|
Java C++
Java反射的简单使用
Java反射的简单使用
19 3
|
8天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
22 3
|
1天前
|
算法 安全 Java
深入探索Java中的并发编程:CAS机制的原理与应用
总之,CAS机制是一种用于并发编程的原子操作,它通过比较内存中的值和预期值来实现多线程下的数据同步和互斥,从而提供了高效的并发控制。它在Java中被广泛应用于实现线程安全的数据结构和算法。
13 0
|
2天前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
5 0
|
2天前
|
传感器 机器人 Java
使用Java构建机器人应用
使用Java构建机器人应用
5 0
|
2天前
|
分布式计算 负载均衡 Java
构建高可用性Java应用:介绍分布式系统设计与开发
构建高可用性Java应用:介绍分布式系统设计与开发
7 0
|
2天前
|
设计模式 算法 Java
设计模式在Java开发中的应用
设计模式在Java开发中的应用
14 0
|
3天前
|
分布式计算 Java 大数据
Java语言主要应用领域
【5月更文挑战第7天】Java在嵌入式系统中以低至130KB的占用展现可靠性,实现“一次编写,到处运行”。在大数据领域,Java通过Hadoop、Hbase、Accumulo和ElasticSearch等工具发挥关键作用。Java也是Eclipse、IntelliJ IDEA和NetBeans等开发工具的基础。广泛应用于电商网站和金融服务器系统,即便在J2ME式微后,仍能在部分低端手机中找到其踪影。
15 4
|
3天前
|
算法 Java 机器人
Java在嵌入式领域的应用
【5月更文挑战第7天】Java广泛应用于消费产品(如智能电视、机顶盒、数码相机)、工业控制(PLC、DCS、FCS)、通信(交换机、路由器、基站)、智能仪器、机器人、计算机外部设备、军事电子及太空科学,涵盖从家用到高科技领域的嵌入式系统开发。
15 4
|
3天前
|
机器学习/深度学习 人工智能 分布式计算
JAVA编程语言在人工智能领域的应用
Java是由Sun Microsystems(已被Oracle收购)于1995年推出的一种跨平台编程语言。它具有面向对象、可移植、高效和安全等特性,成为了广泛应用于企业级应用开发的编程语言之一。
44 21