计算机基础知识分享-4(IOC,DI,java反射机制)

IOC控制反转(Inversion of Control)

我们传统的javaSE程序等都基本是一种典型的相互依赖的程序,也就是一些相互协作的对象构成的。也就是我们所说的正转,即是通过硬编程new一些对象然后对象间相互依赖。所谓的的控制反转就是把创建和查找对象交给容器。

  1. 目的:IOC是一种编程思想,建立一个松散耦合的程序。(高内聚,低耦合的思想)

  2. 把对对象的控制权交给IOC容器控制对象的生命周期和对象间的关系

  3. 通过例子理解:

    • 原始社会中,比如我们需要斧子,就得自己设计斧子,打造斧子,最后才能用这把自己做的斧子。这就有点类似JAVA中自己创建一个对象,然后通过new的方式创建一个对象调用对象的方法。
    • 在工业社会中,比如我们需要斧子,就的去商店购买一把斧子,而这把斧子就从工厂中生产出来的。这个时候就像是JAVA中工厂模式,需要某些对象时候就通过简单的工厂模式设计,我们只要调用工厂类就可以得到想要的对象。
    • 在牛逼的共产主义社会中,我们就只要坐等斧子的到来,全自动的给我们斧子对象,等待IOC容器的注入对象。(无需理会斧子要怎么new一个对象,无需定位工厂类)

DI依赖注入(Dependency Injection)

其实IOC依赖注入和DI控制反转是统一的,在一个运行的IOC容器中,容器能够动态的提供给一些需要的其他对象或者说组件中。这些需要的对象就是通过DI这个方式注入来实现的。至于怎么实现,就是通过JAVA的反射机制来实现的。

  1. 注入的方式:
    1. setter设值注入
    2. 构造注入
  2. java的反射机制
    1. 概念:在java运行的过程中,对于任意的类都可以知道他的所有属性和方法,对于任意一个对象都可以调用他的属性和方法,这种动态获取对象和调用对象方法的功能。
    2. 反射机制获取类有三种方法:
    //第一种方式:  
    Classc1 = Class.forName("Employee");  
    //第二种方式:  
    //java中每个类型都有class 属性.  
    Classc2 = Employee.class;  
     
    //第三种方式:  
    //java语言中任何一个java对象都有getClass 方法  
    Employeee = new Employee();  
    Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)  
    
    1. 创建对象:获取类以后我们来创建它的对象,利用newInstance
    Class c =Class.forName("Employee");  
    //创建此Class 对象所表示的类的一个新实例  
    Objecto = c.newInstance(); //调用了Employee的无参数构造方法. 
    
    1. 获取属性:分为所有的属性和指定的属性:
     ```
     /获取整个类  
         Class c = Class.forName("java.lang.Integer");  
           //获取所有的属性?  
         Field[] fs = c.getDeclaredFields();  
    
                //定义可变长的字符串,用来存储属性  
         StringBuffer sb = new StringBuffer();  
         //通过追加的方法,将每个属性拼接到此字符串中  
         //最外边的public定义  
         sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");  
         //里边的每一个属性  
         for(Field field:fs){  
             sb.append("\t");//空格  
             sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等  
             sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字  
             sb.append(field.getName()+";\n");//属性的名字+回车  
         }  
    
         sb.append("}");  
    
         System.out.println(sb);  
         
     ```
     ```
     public static void main(String[] args) throws Exception{  
         /* 
         User u = new User(); 
         u.age = 12; //set 
         System.out.println(u.age); //get 
         */  
                   
         //获取类  
         Class c = Class.forName("User");  
         //获取id属性  
         Field idF = c.getDeclaredField("id");  
         //实例化这个类赋给o  
         Object o = c.newInstance();  
         //打破封装  
         idF.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。  
         //给o对象的id属性赋值"110"  
         idF.set(o, "110"); //set  
         //get  
         System.out.println(idF.get(o));  
     }  
    
     ```
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,620评论 0 11
  • 一. Java基础部分.................................................
    wy_sure阅读 3,780评论 0 11
  • 已经不止一次掉入这个坑:特意空出大块的时间思考方向、战略,结果浪费了大块的时间。 不是说这种方式不好、不需要这样做...
    ITJason阅读 33评论 0 0
  • 那天你悄悄趴到我的耳边 无意中吹痒我的耳缘 但我脸红心跳的样子你没发现 你只是想找个朋友倾诉在口耳之间 . 你说着...
    水摇绢阅读 107评论 0 0