java反射简单实现注入

做了好久的java开发 ,却一直没有详细了解java反射机制,后来写项目的时候发现用反射可以少写好多无聊的代码,因此用java反射简单实现注入。

java反射的具体细节可参见 这篇博客写的非常详细,点此进入~

而一般基于业务的编程主要用反射实现将属性动态的注入一个对象中。

以下是方法实现:

 1 /**
 2      * 根据 传入的map与类名,通过反射实例化对象
 3      * @param className  需要实例化的类名
 4      * @param map 包含属性的键值对 (String,Object)
 5      * @return 实例化成功的对象
 6      */
 7     public static Object map2Bean(String className,Map<String,Object> map){
 8         Object obj=null;
 9         try {
10             //根据类名实例化对象
11             obj=Class.forName(className).newInstance();
12
13             for(String key :map.keySet()){
14                 if(key!=null&&!"".equals(key)){
15
16                     //将属性首字符大写
17                     Character c=key.charAt(0);
18                     c=Character.toUpperCase(c);
19                     String temp=String.valueOf(c);
20                     if(key.length()>1)
21                         temp+=key.substring(1);
22
23                     Method methods[]=obj.getClass().getMethods();
24                     for(int i=0;i<methods.length;++i){
25                         //判断方法名是否匹配
26                         if(methods[i].getName().contains("set"+temp))
27                         {
28                             //执行方法,传入值
29                             methods[i].invoke(obj, map.get(key));
30                             break;
31                         }
32                     }
33                 }
34             }
35 //            Method method=obj.getClass().getMethod("toString");
36 //            method.invoke(obj, null);
37         } catch (InstantiationException e) {
38
39             e.printStackTrace();
40         } catch (IllegalAccessException e) {
41
42             e.printStackTrace();
43         } catch (SecurityException e) {
44
45             e.printStackTrace();
46         } catch (IllegalArgumentException e) {
47
48             e.printStackTrace();
49         } catch (InvocationTargetException e) {
50
51             e.printStackTrace();
52         } catch (ClassNotFoundException e) {
53
54             e.printStackTrace();
55         }
56         return obj;
57
58     }

接下来是调用~

public static void main(String[] args) {

        //传入参数
        Map<String,Object> map=new HashMap<String, Object>();
        map.put("id", 1);
        map.put("name", "lz");
        map.put("age", 20);
        map.put("email", "[email protected]");
        map.put("qq", "100000");
        map.put("address", "tj");

        Person person=(Person) map2Bean(Person.class.getName(),map);
        person.toString();

    }
时间: 2024-08-24 05:26:50

java反射简单实现注入的相关文章

Java反射及依赖注入简单模拟

一.编写Dao类 ? 1 2 3 4 5 6 7 8 9 10 11 package cn.com.songjy.annotation; import java.util.Date; public class MyDao {     public String time(){         return "你好,现在的时间是:" + new Date();     }      } 二.编写属性文件[my.properties,类似spring的配置文件]并将MyDao类配置到其中,

Java反射-简单应用

为了程序更好的维护和扩展,在面向对象思维的世界里,首先是面向接口编程,然后我们应该把做什么和怎么做进行分离. 下面我将用一个开晚会的例子来演示一下,最终达到的效果是:工厂+反射+配置文件实现程序的灵活应用.会具体说明一下这个过程是怎么来的,明白了这个,就会对反射和配置文件的结合更加深刻一些. 想要实现的功能是:晚会有一个唱歌.舞蹈.小品的节目单,具体各个节目的表演者只需要一个就可以,每一个表演接口都有两个实现类(表演者),通过客户端调用不同的实现类来实现不同的节目单.表演者就是"做什么"

Java反射 - 简单的给Bean赋值和取值

由于项目的实际需要,所以利用java反射原理写了一个简单给bean赋值和取值通用的类,在此记录下方便自己日后用到,也为需要的兄弟提供个参考例子. 工具类BeanRefUtil: [java] view plain copy print? package com.test; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.u

Java反射+简单工厂模式总结

除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 一般情况下,最直接的写法为: public class Apple { public void get() { System.out.println("得到苹果"); } }   public class Banana { public void get() { System.out.p

java反射简单例子

假设有如下类: package com.test.reflect; public class Person { private int age; private String name; public Persion() { } public Persion(String name) { this.name = name; } public Persion(String name,int age) { this(name); this.age = age; } public void setNa

java反射机制简单介绍

1.字节码.所谓的字节码就是当java虚拟机载入某个类的对象时,首先须要将硬盘中该类的源码编译成class文件的二进制代码(字节码),然后将class文件的字节码载入到内存中,之后再创建该类的对象 2.java反射的基础是Class类(注意不是小写的class),Class类实例代表着内存中的一份字节码.常见的获取Class类对象的方法例如以下(第一种为对象的方法,另外一种为类的方法): Dog dog = new Dog(); Class dogClass = dog.getClass();

Java反射机制的原理及在Android下的简单应用

花了几天时间,研究了一下Java的反射机制.在这里总结一下这几天学习的成果,一来分享自己的学习过程和在学习中遇到的问题,二来是给像我一样不太了解Java反射机制的同学做一个简单的介绍.在文章后面会链接一个Android反射机制的应用程序. 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述

java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象

java反射并不是什么高深技术,面向对象语言都有这个功能. 面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象,去获取类相关的信息 2.利用java反射可以调用类的私有方法么?private()方法 答:可以,class取出method,method继承executable类,executable类继承AccessibleObject类,AccessibleObject有个setAccessiable()设置这个方法是否可访问. 则设置成true,就可将pr

java反射之Constructor简单应用

Constructor类是java反射中重要的类,它是对类中构造器的描述的类.类似于Method(对类中方法的描述的类),Field(对类中属性的描述的类). 通过创建Constructor的对象实例,我们可以创建源对象. 小测试demo: package com.wtd; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Array