反射、代理等框架与加载器

反射

反射就是加载,解析并执行类

一、反射的用处

反射让编译独立

反射机制是构建框架技术的基础所在。

    A程序员要调用B的类,B没有写完,但是A可以编译通过

    Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力(如编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来)

    在MVC中,在框架中.有一个概念交控制反转(依赖注入)就是通过反射[3].

//控制反转例子
class A{
    B b = new B()
}

//这里B是A创建的 A要调用B.控制权在A. 但是控制反转后B应该由外部容器创建.改造后依赖对象B的实例创建是外部注入的.B是一个接口
class A{
    B b;

    f(B b){
        this.b=b;
    }
}

 

  • 用反射建立框架

    框架就是可以调用给定的程序,或任何东西.框架运行什么程序是基于配置文件的,配了什么就运行什么. 框架根据配置文件加载并运行类. 这里就需要反射.

为什么要用框架

    没有框架式很难解耦的.有了框架之类上层调用下层只用给出下层的接口上层通过接口注入真实的对象.

  • 反射让程序动态执行

二、使用反射

作用:用来做框架

概念:加载类并解析类的组成

应用场景:

实例:

com.netease.entity.Person.run()类中的方法为何能够运行? 框架先加载类,再解析出run()方法,然后运行.jvm是个框架.代码为啥能在jvm中运行,靠的是反射!

  • 加载类

Object下有个Class类.这个类有点特殊.Class<T>代表某个类的字节码.

他的作用是用来加载某个类,Class.forName(String className),返回一个类的字节码.

示例:

Person.run()另一种运行的方法:

Class cl = Class.forName(com.netease.entity.Person);

//其他加载类的方法:

Class cl = new Person().getClass();

Class cl = Person.class();
  • 解剖类
Class提供了一些方法 

   getConstructor() getMethod() getFiled()

获得私有的构造函数

    getDeclaredConstructor()

怎么用反射

解析出构造函数就用它创建对象

解析出一个字段你就给她封装数据

解析出方法就跑之

 

 

一些例子

package com.just;

 

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

 

//简单的反射demo

public class Test {

 public void printf(){
  System.out.println("hhh");
 }

 public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
  Class c = Class.forName("com.just.Test");
  Method m = c.getDeclaredMethod("printf",null);
  m.invoke(c.newInstance(),null);
 }
}

 

 

posted @ 2016-10-13 15:26  EDPL  阅读(99)  评论(0)    收藏  举报