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. Hibernate(开放源代码的对象关系映射框架)

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自 ...

  2. 前端利器---Bootstrap

    看着那么多大神在博客上都有自己的心得和分享,我虽然工作不久,但也想做一下自己的笔记起码对自己是一次积累和锻炼的过程.所以心血来潮今天就注册了博客. 我今天想说一下Bootstrap,学前台的大概对Bo ...

  3. c++并发练习---生产者消费者模型

    问题:有一个生产者,多个消费者,生产者每生产一个,放入队列,多个消费者顺序从队列中取出数据,打印最终结果. 分析:首先这题,我本意应该设计成如下模型:生产者单开一个线程,向队列中放入数据,而消费者在锁 ...

  4. Mojette

    Mojette Transform 是由Polytech Nantes的IRCCYyN实验室的Jeanpierre Guédon首先提出的一种离散的几何转换,它来源于Radon transform,是 ...

  5. c# 无法加载 DLL xxxxxxxx找不到指定的模块。 (异常来自HRESULT:0x8007007E)。的一个解决方法

    最近在做一个程序,想把某些功能用C++写成DLL供C#调用.但是无法如何都无法调用,提示"无法加载 DLL xxxxxxxx找不到指定的模块. (异常来自HRESULT:0x8007007E ...

  6. CPU过高的排查方法

    一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hank ...

  7. JAX-WS使用Handler Chain加工消息

    承前 本文的示例,是基于前一篇文章中的实例而改进的,如果想要运行本文的代码例子,需要先实现前一篇的代码. 前一篇文章JAX-WS开发WebService初级 Handler概念 在WebService ...

  8. java时间段分成小段存储

    package testThread; import java.text.ParseException; import java.text.SimpleDateFormat; import java. ...

  9. 自定义view--实现滑动

    1.重写 onInterceptTouchEvent() 拦截触摸事件 是由父控件向子控件传递 默认返回false 返回true,事件被当前的viewGroup进行处理,Touch事件不向下(子控件) ...

  10. .net 导出Excel功能

    将DataSet对象导出成Excel文档 一.不带格式控制 void btnExport_Click(object sender, EventArgs e) { IList<string> ...