zoukankan      html  css  js  c++  java
  • java反射机制

      JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

      JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

    Java反射机制主要提供了以下功能: 在运行时,判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时,判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

      通过反射来检测或者修改应用某些对象在运行时的状态或者行为。允许程序在运行时通过Reflecttion APIs 动态取得任意一个已知名称的class 的内部信息,包括其修饰符(诸如public static 等等)父类(例如Object) 实现之接口(例如serializable),也包括成员变量和方法的所有信息,并可于运行时改变成员变量的内容或者调用方法(包括私有方法,我们知道被private 修饰的封装的机制,是不能被外部所使用的,但是通过反射,我们可以改变私有变量和方法)。举例:spring框架是事先就写好的框架,他内部的处理并不知道用户要写哪些类,因为那是以后由用他的人来定的,所以用户在用的时候才去配置文件中配置类路径,这是一个典型反射的例子。

    因此能够实现在运行时加载、探知、使用编译期间完全未知的classes。

     

      涉及两个类:Class and ClassLoader

      ClassLoader 将各类load到内存中,一个个class就是一个一个对象,由于动态加载机制,class是一个个加载的,且是需要的时候加载。Static语句块只加载一次,而Dynamic语句块则是每次new新对  象的时候都会执行,其中核心类被bootstrap class loader 加载。通过这种方法,就可以知道这个类的名字,能够new出来一个对象:

      首先加载出来:

      String s = “M”;

      Class c = class.forName(str); // 返回值是class对象,参数为类名;

      Class.forName()的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码u

      动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象时需要用到
      String str = “用户输入的字符串” ;
      Class t = Class.forName(str);
      t.newInstance();

      Object o = c.newInstance();// new一个对象

      Method [] ms= c.getmethods(o);//获得所有方法

      Method m1;String s1 = m1.getName();//获得方法名称

      m1.invoke(o);

      Invoke:可变参数的方法.形参变(Object obj,Object…args),后面可传0到多个参数

      getParameterTypes()

      java.lang.reflect.Method.getParameterTypes()方法返回一个Class对象数组,它们以声明顺序表示由此Method对象表示的方法的形式参数类型。如果底层方法没有参数,则返回长度为0的数组。

      Method[] methods = SampleClass.class.getMethods();

      Class[] parameterTypes = methods[1].getParameterTypes();

     

    有关spring 框架:

    1、Spring是一个开元的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入; 
    2、Spring的IOC和AOP应用,将组件的耦合度降至最低,即解耦,便于系统的维护和升级; 
    3、可以与第三方框架和技术整合应用,可以自由选择技术进行开发。

        注解:

    a)@Component        为通用注解

    b)@Repository       为持久层组件注解

    c)@Service          为业务层组件注解

    d)@Controller       为控制层注解

    e)@Scope            为Bean的作用域注解

    f)@Autowired        为指定Bean之间依赖关系的注解

    g)@Inject           为指定Bean之间依赖关系的注解

    h)@Value            为注入Spring表达式值的注解

    j)@ResponseBody             为Ajax返回类型的注解

      高亮部分为不明白的地方,希望大佬指教。。。:):):)

      有些资料来源于博客和百度百科,侵删:)

  • 相关阅读:
    vCenter6.7的简单安装与使用
    大家来找茬
    Android APP分享功能实现
    为免费app嵌入Admob广告
    Google Admob广告Android全攻略1
    开始Admob广告盈利模式详细教程
    android软件中加入广告实现方法
    onWindowFocusChanged重要作用 and Activity生命周期
    WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
    android之intent显式,显式学习
  • 原文地址:https://www.cnblogs.com/LOW-ctfer/p/8947478.html
Copyright © 2011-2022 走看看