IOC基于Java底层的反射机制实现
反射机制:
核心:
Class cls = Class.forName(类名); 
Class ptypes[] = new Class[2]; 
ptypes[0] = Class.forName("java.lang.String"); 
ptypes[1] = Class.forName("java.util.Hashtable"); 
//参数调用   重点必须指定方法名,和相应的参数数量和类型
Method method = cls.getMethod("testMethod", ptypes); 

如何知道参数类型数量:
Method []m= cls.getMethods(); 
if(m!=null &&m.length>0) 

    for (int i = 0; i < m.length; i++) { 
        if(m[i].getName().equals("testMethod")){ 
            Parameter []p=m[i].getParameters(); 
            if(p!=null && p.length>0) 
              { 
                    for (Parameter parameter : p) { 
                    System.out.println(parameter.getType().getName()); 
                } 
            } 
        } 
    } 

如何调用:
Object args[] = new Object[2]; 
args[0] = "hello, my dear!"; 
Hashtable<String, String> ht = new Hashtable<String, String>(); 
ht.put("name", "阿蜜果"); 
args[1] = ht; 
String returnStr = (String) method.invoke(new ReflectionTest(), args); 
System.out.println("returnStr= " + returnStr); 

例子:
package com.gillion.javaReflection;

import java.awt.Button; 
import java.lang.reflect.Method; 
import java.lang.reflect.Parameter; 
import java.util.Hashtable; 
/** 
* @Description Java的反射机制 
* @author huyuangui@aliyun.com 
* @time 2015年1月8日 下午4:53:24 
* @version 1.0.0 
*/ 
public class ReflectionTest {

/** 
* 入口 
* @param args 
* @throws Exception 
*/ 
public static void main(String[] args) throws Exception { 
ReflectionTest reflection = new ReflectionTest(); 
reflection.getNameTest(); 
System.out.println(""); 
reflection.getMethodTest(); 
}

/** 
* 获取类名 全路径 
* @throws Exception 
*/ 
public void getNameTest() throws Exception { 
System.out.println("===========begin getNameTest============"); 
String name = "阿蜜果"; 
Class cls = name.getClass(); 
System.out.println("String类名: " + cls.getName()); 
Button btn = new Button(); 
Class btnClass = btn.getClass(); 
System.out.println("Button类名: " + btnClass.getName()); 
Class superBtnClass = btnClass.getSuperclass(); 
System.out.println("Button的父类名: " + superBtnClass.getName()); 
Class clsTest = Class.forName("java.awt.Button"); 
System.out.println("clsTest name: " + clsTest.getName()); 
System.out.println("===========end getNameTest============"); 
}

public void getMethodTest() throws Exception { 
System.out.println("===========begin getMethodTest=========="); 
Class cls = Class.forName("com.gillion.javaReflection.ReflectionTest"); 
Class ptypes[] = new Class[2]; 
ptypes[0] = Class.forName("java.lang.String"); 
ptypes[1] = Class.forName("java.util.Hashtable"); 
//参数调用 
Method method = cls.getMethod("testMethod", ptypes); 
/*** 
* 需要注入哪些参数,参数类型是什么,有多少个参数 
*/ 
Method []m= cls.getMethods(); 
if(m!=null &&m.length>0) 

for (int i = 0; i < m.length; i++) { 
if(m[i].getName().equals("testMethod")){ 
Parameter []p=m[i].getParameters(); 
if(p!=null && p.length>0) 

for (Parameter parameter : p) { 
System.out.println(parameter.getType().getName()); 





Object args[] = new Object[2]; 
args[0] = "hello, my dear!"; 
Hashtable<String, String> ht = new Hashtable<String, String>(); 
ht.put("name", "阿蜜果"); 
args[1] = ht;

String returnStr = (String) method.invoke(new ReflectionTest(), args); 
System.out.println("returnStr= " + returnStr); 
System.out.println("===========end getMethodTest=========="); 
}

public String testMethod(String str, Hashtable ht) throws Exception { 
String returnStr = "返回值"; 
System.out.println("测试testMethod()方法调用"); 
System.out.println("str= " + str); 
System.out.println("名字= " + (String) ht.get("name")); 
System.out.println("结束testMethod()方法调用"); 
return returnStr; 

 
 

(满满的是硬货)Spring深入研究一IOC实现的更多相关文章

  1. spring源码浅析——IOC

    =========================================== 原文链接: spring源码浅析--IOC   转载请注明出处! ======================= ...

  2. spring jpetstore研究入门(zz)

    spring jpetstore研究入门 分类: java2008-12-21 23:25 561人阅读 评论(2) 收藏 举报 springstrutsibatissearchweb框架servle ...

  3. spring(一)IOC & AOP

    参考文档: spring详解:http://www.cnblogs.com/ysocean/p/7466191.html(可以说非常详细了) aop源码详解:https://www.cnblogs.c ...

  4. spring.net中的IOC和DI-初使用

    前面准备:下载spring.net并解压 下载地址:spring.net下载地址 Ioc:控制反转         DI:依赖注入 一.IOC(控制反转) 1.新建一个控制台程序springTest, ...

  5. spring 学习 AOP和IOC

    自11开始接触三大框架,至今已俞5载, 当时风光无限的ssh,现在还在被广泛使用,并有扩大之势的只有spring了 spring主要特性,是广为使用的AOP(面向切面)和IOC(控制反转) 1.其中, ...

  6. spring学习(01)之IOC

    spring学习(01)之IOC IOC:控制反转——Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创 ...

  7. spring源码分析---IOC(1)

    我们都知道spring有2个最重要的概念,IOC(控制反转)和AOP(依赖注入).今天我就分享一下spring源码的IOC. IOC的定义:直观的来说,就是由spring来负责控制对象的生命周期和对象 ...

  8. Spring框架学习之IOC(二)

    Spring框架学习之IOC(二) 接着上一篇的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包 ...

  9. Spring框架学习之IOC(一)

    Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...

随机推荐

  1. Android 开机自启服务

    package com.example.lenovo.guangbo; import android.app.Service; import android.content.Intent; impor ...

  2. Arduino入门笔记【1】

    刚刚接触这个东西只知道这是类似于单片机的开发板,可以做一些单片机实现或者不能实现的东西,但是比单片机要简单得多. Arduino到底是什么? 维基百科上的描述是:Arduino是一块开发板的微控制器和 ...

  3. Struts 2开发基本流程

    Struts 2工作流程 Struts2是一个基于MVC设计模式的Web开发框架, 正如官网上介绍的那样: ApacheStruts 2 is an elegant, extensible frame ...

  4. NE Upgrade python script. Need to write a Tkinter GUI for it

    # -*- coding: utf-8 -*-#from ftplib import FTP __authour__='CC' import osimport telnetlibimport time ...

  5. ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

    问题:ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 解决方案:在查询的时候加上AsNoTracking()就ok ...

  6. Markdown中插入数学公式的方法

    Markdown中插入数学公式的方法 文章来源:http://blog.csdn.net/xiahouzuoxin/article/details/26478179 自从使用Markdown以来,就开 ...

  7. python成长之路【第九篇】:网络编程

    一.套接字 1.1.套接字套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信.这就是所谓的进程间通信(Inter Process Commun ...

  8. 《C++ Primer》学习笔记【第二部分 C++标准库】

    第8章 IO库 IO对象不能复制,即1.IO对象不能存储在vector或其他容器中   2.如果需要传递或返回IO对象,必须传递或返回指向该对象的指针或引用. 一般情况下,如果要传递IO对象以便对它进 ...

  9. 在Eclipse中添加C/C++插件

    如果尚未安装 Eclipse,可直接下载包含C/C++的 Eclipse IDE http://www.eclipse.org/downloads/eclipse-packages/?osType=l ...

  10. 获取openid 的步骤

    1.引导客户打开 https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid &redirect_uri=https://w ...