美文网首页
Java学习:反射的应用,依赖加载

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

作者: 我的袜子都是洞 | 来源:发表于2019-01-17 14:45 被阅读2次

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

配置文件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

相关文章

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

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

  • 【转】Java编程学习之反射技术及其应用

    【转】Java编程学习之反射技术及其应用 (原文链接:java编程学习之反射技术及其应用) 说明:原文中给出的代码...

  • java关于反射 example

    在之前的时候第一次知道了java的反射的概念。 其应用的是java的类加载器, java的类加载器在加载一个类文件...

  • b04-2 spring容器相关java知识-反射(精通Spri

    本篇内容: 1、java反射实现 2、java类加载器ClassLoader 3、java反射机制 一、java反...

  • 玩转java反射

    原文 类加载器什么是类加载器类加载器的职责类加载器的组成 反射什么是反射如何使用反射反射在Android中的应用 ...

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • 安卓反射和动态代理的应用

    提纲 java反射基础 反射在Android中的应用 Java动态代理 动态代理在Android的应用 java反...

  • Java基础之反射

    Java-Reflect Class类的使用 方法的反射 成员变量的反射 构造函数的反射 Java类加载机制 一、...

  • Java基础再回顾-Java反射

    静态加载和动态加载 为了更好地了解Java反射,我们先来理解一下Java的静态加载和动态加载。 静态加载 静态加载...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

网友评论

      本文标题:Java学习:反射的应用,依赖加载

      本文链接:https://www.haomeiwen.com/subject/gyjidqtx.html