当前位置: 首页 > news >正文

策划 网站免费软件库下载

策划 网站,免费软件库下载,网站建设公司怎么挣钱,快速建设网站服务我们知道,Spring中大量使用了反射机制#xff0c;那么究竟是什么地方使用了呢#xff1f;就从源头说起吧。 一 反射源头Class类 对类的概念我们已经非常熟悉了。比如可以有Student这个类#xff0c;Person这个类。但是我们要知道#xff0c;有一个叫Class的类#xff0c;… 我们知道,Spring中大量使用了反射机制那么究竟是什么地方使用了呢就从源头说起吧。   一  反射源头Class类 对类的概念我们已经非常熟悉了。比如可以有Student这个类Person这个类。但是我们要知道有一个叫Class的类它是反射的源头。   正常方式通过完整的类名—通过new实例化—取得实例化对象 反射方式实例化对象—getClass()方法—通过完整的类名   一个简单的例子 package cn.classes; public class OneClass { } package cn.test; import cn.classes.OneClass; public class Test {     public static void main(String[] args) {         OneClass c new OneClass();         System.out.println(c.getClass().getName());   } } 输出结果cn.classes.OneClass 我们需要使用反射就要获得Class这个类有三种方法 package cn.classes; public class OneClass { } import cn.classes.OneClass; public class Test { public static void main(String[] args) {      Class? c1 null;      Class? c2 null;      Class? c3 null;      try      {          // 方法一forName(重要)          c1 Class.forName(cn.classes.OneClass);    }      catch (ClassNotFoundException e)      {          e.printStackTrace();     }      // 方法二      c2 new OneClass().getClass();        // 方法三      c3 OneClass.class;      System.out.println(c1.getName());      System.out.println(c2.getName());      System.out.println(c3.getName());    } } 输出结果cn.classes.OneClass     二 利用Class这个类实例化类 ①无参构造 package cn.classes; public class Person {     private String name;     private int age;      .............省略getter,setter..............     Override     public String toString()     {           return Person [name name , age age ];     } } package cn.test; import cn.classes.Person; public class Test {     // 这样做必须在类中有一个空构造方法     public static void main(String[] args)     {               Class? c null;                try                {                       c Class.forName(cn.classes.Person);                      Person p (Person)c.newInstance();                      p.setName(xy);                       p.setAge(20);                       System.out.println(p);                }                catch (Exception e)               {                       e.printStackTrace();                }        } }   ②有参构造 package cn.classes; public class Person {     private String name;     private int age;      public Person(Stringname,int age){                  this.name name;                  this.age age;     }     .............省略getter,setter..............         Override     public String toString()     {           return Person [name name , age age ];     } } package cn.test; import java.lang.reflect.Constructor; import cn.classes.Person; public class Test {     // 如果没有一个空构造方法     public static void main(String[] args)     {           Class? c null;           try           {                   c Class.forName(cn.classes.Person);                  Constructor? con c.getConstructors(String.class,int.class);                  Person p (Person)con.newInstance(xy,20);                  System.out.println(p);           }           catch (Exception e)          {                 e.printStackTrace();          }       } }   三 Spring中使用Class实例化 bean.xml bean idid classcom.xy.Student /   Spring将采用的代码创建代码Java实例Class c Class.forName(com.xy.Student); Object bean c.newInstance();     四 Class类调用方法 package cn.classes; public class Person {     public void add()     {            System.out.println(add);     }     public void addWithParameters(String name, int age)     {             System.out.println(add带参数方法 name age);     } } package cn.test; import java.lang.reflect.Method; public class Test {     public static void main(String[] args)     {              Class? c1 null;              try              {                    c1 Class.forName(cn.classes.Person);                    // 不带参数的方法调用                    Method m c1.getMethod(add);                   m.invoke(c1.newInstance());                      // 带参数方法调用                    Method m1 c1.getMethod(addWithParameters, String.class, int.class);                   m1.invoke(c1.newInstance(), xy, 22);            }             catch (Exception e)             {                    e.printStackTrace();             }     } }     五 Class获得gettersetter方法 Class这个类可以获得类的很多信息比如获得该类的接口构造函数属性方法等。我们来看如何获得gettersetter方法。 package cn.classes; public class Person {     private String name;     private int age;     省略getter,setter    }   package cn.test; import java.lang.reflect.Method; public class Test {     public static void main(String[] args)     {            Class? c1 null;            Object obj null;            try            {                      c1 Class.forName(cn.classes.Person);                      obj c1.newInstance();                      setter(obj, name, xy, String.class);                      setter(obj, age, 20, int.class);                      getter(obj, name);                      getter(obj, age);            }            catch (Exception e)             {                     e.printStackTrace();             }    }    /**     * param obj要操作的对象     * param att要操作的属性     * param value要设置的属性内容     * param type要设置的属性类型     */     public static void setter(Object obj, String att, Object value, Class? type)     {          try          {             // 得到setter方法           Method m obj.getClass().getMethod(set initStr(att), type);           m.invoke(obj, value);          }          catch (Exception e)          {           e.printStackTrace();          }    }    /**     * param obj要操作的对象     * param att要操作的属性     */    public static void getter(Object obj, String att)    {         try         {                // 得到getter方法                Method m obj.getClass().getMethod(get initStr(att));                System.out.println(m.invoke(obj));         }        catch (Exception e)        {                e.printStackTrace();        }    }    public static String initStr(String oldStr)    {          String newStr oldStr.substring(0, 1).toUpperCase() oldStr.substring(1);          return newStr;    } }   六 Spring调用getter,setter方法 我们以setter注入例子 bean.xml bean idid classcom.xy.Student     property namestuName valuexy //bean Spring将采用的代码创建代码Java实例并注入值Class c Class.forName(com.xy.Student); Object bean c.newInstance(); 通过一些操作获取对stuName对应的setter方法名String setname set StuName; Method method c.getMehod(setname,String.Class); method.invoke(bean,xy); 这样就完成了最基本的注入操作。当然Spring还可以通过构造函数进行注入。这样就参考第二点有参构造的Class的使用。 Class还可以访问Annotation这样就Spring使用注解的时候可以完成注入的功能。   七 总结 反射的内容还是很多的需要系统的学习。当然Spring也是。 本文转自IT徐胖子的专栏博客51CTO博客原文链接http://blog.51cto.com/woshixy/1060263如需转载请自行联系原作者 woshixuye111
http://www.yutouwan.com/news/365533/

相关文章:

  • 企业网站是什么一家专门做母婴的网站
  • 做的网站显示不了背景图片wordpress电商主题完成度
  • 知名跟单网站做信号提供方如何开发电子商务网站
  • 什么是网站静态化怎样做网站跳转
  • 建设银行互联网网站首页定远网站开发
  • 淘宝网站怎样建阿里云网站域名备案
  • html5 图片网站模板免费商务网
  • react做的电商网站能上线吗wordpress+博客主题
  • 汕头做网站多少钱做网站动态效果心得
  • 养老院网站建设方案prestashop和wordpress
  • 做网站一定要用到dw做网站网站如何定位
  • 河北seo技术网站建设或网站优化排名
  • 做公司网站的步骤网站开发心得
  • 提供专业网站建设地推团队如何收费
  • 河南网站开发茶文化网站建设规划书范文
  • 网站怎么做赚钱专业做图片制作网站
  • 郑州冬青街 网站建设三牛网站建设
  • 网页设计与制作个人网站昆山建设招投标网站
  • 汪峰做的音乐网站济南市建设工程招标网官网
  • 宁波做网站公司龙岩做网站开发找哪家
  • 顺企网哈尔滨网站建设网络公司关键词排名
  • 网站开发从哪开始学tcn短链接在线生成
  • 建公司网站哪家公司好温岭 网站建设
  • 云南城市建设职业学院成绩查询网站制造业小程序网站开发
  • 怎样建设网站施工吴江市中云建设监理有限公司网站
  • 怎么看一个网站是由哪个公司做的it网站建设干嘛的
  • 哪个网站做任务钱给得多周口seo
  • 网站建设平台软件郑州模板建站代理
  • 有哪些做买家秀的网站快速做网站公司报价
  • 织梦网站首页空白长春火车站哪个区