spring IOC 实现原理模拟实现

Spring Ioc实现机制——简析 需要明确一点,任何项目没有了Spring,也依旧能做,那么为什么Spring还会这么火?答案就是Spring的两个特性IoC与AOP,这里需要指出的是,并不是Spring提出的AOP的概念,只能说是Spring很好的实现了AOP的特性。那么,这次就先讨论下Spring IoC的实现机制。  IoC是什么东东? IoC实现的机制是什么样子的? 模拟一个Spring IoC的实现 阅读详情

http://blog.youkuaiyun.com/xuelong8866/article/details/2937224

 

最近对spring IOC AOP 机制实现原理了解了下,在此做下整理,希望能给需要的朋友予以帮助。整理的资料来自互联网,文章开头是我写的测试代码例子,可以直接导入eclipse,别忘了导入dom4jjar包。

 

例子代码下载链接:http://download.youkuaiyun.com/source/630961

 

利用java的反射和动态代理实现IOC

       在Java中,其反射和动态代理机制极其强大,我们可以通过其反射机制在运行时获取信息。而代理是一种基本的设计模式,它是一种为了提供额外的或不同的操作而插入到真实对象中的某个对象。而Java的动态代理在代理上更进一步,既能动态的创建代理对象,又能动态的调用代理方法。Java的反射和动态代理机制,使Java变得更加强大。

       Spring框架这几年风头正劲,虽然使用者众多,但真正了解其内部实现原理的朋友却并不是很多。其实,了解它的内部实现机制和设计思想是很有必要的大家都知道,Spring框架的IOC和AOP部分功能强大,很值得我们学习。那么让我们在这两篇文章中分别详细的学习IOC和AOP的实现吧。

在本文中,主要讲述的是用Java的反射机制实现IOC。下面,让我们开始IOC之旅吧!

一.             Java反射机制概述与初探

Java的反射机制是Java语言的一个重要特性,Java具有的比较突出的动态机制就是反射(reflection)。通过它,我们可以获取如下信息:

1) 在运行时判断任意一个对象所属的类;

2) 在运行时获取类的对象;

3) 在运行时获得类所具有的成员变量和方法等。

下面让我们通过调用一个Java Reflection API的演示实例来见识一下反射机制的强大。

首先在IDE中建立名为reflection_proxy的Java工程,并建立存放源文件的目录src,并在src目录下分别建立org.amigo. reflection目录和org.amigo.proxy目录来分别存放代理和反射的实例。我们在reflection目录下建立ReflectionTest.java文件,在该文件中编写代码来演示Java Reflection API的使用。该类的代码如下所示:

package  org.amigo.reflection;

import  java.awt.Button;
import  java.lang.reflect.Method;
import  java.util.Hashtable;


publicclass ReflectionTest 
{

    

    publicstaticvoid main(String[] args) 
throws Exception {
        ReflectionTest reflection 
= new ReflectionTest();
        reflection.getNameTest();
        System.out.println(
"");
        reflection.getMethodTest();
     }


    

    publicvoid 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============");
     }

    
    

    publicvoid getMethodTest() 
throws Exception {
        System.out.println(
"===========begin getMethodTest==========");
        Class cls 
= Class.forName("org.amigo.reflection.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);
        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;
 }

 }

     运行该例,可在控制台看到如下内容:

===========begin getNameTest============

String类名: java.lang.String

Button类名: java.awt.Button

Button的父类名: java.awt.Component

clsTest name: java.awt.Button

===========end getNameTest============

===========begin getMethodTest==========

测试testMethod()方法调用

str= hello, my dear!

名字= 阿蜜果

结束testMethod()方法调用

returnStr= 返回值

===========end getMethodTest==========

    分析运行结果,我们可以发现,Java的反射机制使得我们在运行时能够判断一个对象所属的类,获取对象的方法并得其进行调用,并获取方法的返回结果等功能。

二.             IOC使用的背景

在我们日常的设计中,类与类之间存在着千丝万缕的关系,如果两个类存在着强耦合关系,那么在维护时,一个类的修改很可能会牵动另一个类的关联修改,从而使得我们的维护工作步履维艰。下面让我们来看这样的一个强耦合反面例子。

首先我们建立一个Chinese.java类,该类的sayHelloWorld(String name)方法,用中文对名为name的人问好,其内容如下:

package  org.amigo.reflection;


publicclass Chinese 
{

    

    publicvoid sayHelloWorld(String name) 
{
       String helloWorld 
= "你好," + name;
       System.out.println(helloWorld);
     }

 }

 

下面我们接着建立一个American.java类,该类的sayHelloWorld(String name)方法,用英文对名为name的人问好,其内容如下:

package  org.amigo.reflection;


publicclass American 
{

    

    publicvoid sayHelloWorld(String name) 
{
       String helloWorld 
= "Hello," + name;
       System.out.println(helloWorld);
     }

 }

 

    最后我们编写一个测试类对这两个类的sayHelloWorld(String name)方法进行测试,下面是该类的内容:

package  org.amigo.reflection;


publicclass HelloWorldTest 
{

    

    publicstaticvoid main(String[] args) 
{
       Chinese chinese 
= new Chinese();
       chinese.sayHelloWorld(
"阿蜜果");
       
       American american 
= new American();
       american.sayHelloWorld(
"Amigo");
     }

 }


    观察HelloWorldTest我们可以很清楚的看到,该类与Chinese.java类和American.java类都存在强耦合关系。

上面的例子让我们想到的是在N年以前,当我们需要某个东西时,我们一般是自己制造。但是当发展到了一定的阶段后,工厂出现了,我们可以工厂中购买我们需要的东西,这极大的方便了我们。在上例中,我们都是通过new来创建新的对象,在开发中,这种强耦合关系是我们所不提倡的,那么我们应该如何来实现这个例子的解耦呢?我们接着想到了使用工厂模式,我们需要新建一个工厂类来完成对象的创建,并采用依赖接口的方式,此时需要对代码进行如下修改:

首先建立接口类Human.java,其内容如下:

package  org.amigo.reflection;


public   interface  Human  {

    

    
public void sayHelloWorld(String name);
 }


并将American.java类和Chinese.java类改为实现该接口,即类头分别改成:public class American implements Human和public class Chinese implements Human。

接着编写HumanFactory.java工厂类,其内容为:

package  org.amigo.reflection;


public   class  HumanFactory  {

       

       
public Human getHuman(String type) {
              
if ("chinese".equals(type)) {
                     
return new Chinese();
              }
 else {
                     
return new American();
               }

        }

 }


最后我们还需要修改测试类HelloWorld.java类,修改后的内容如下:

package  org.amigo.reflection;


public   class  HelloWorldTest  {

       

       
public static void main(String[] args) {
              HumanFactory factory 
= new HumanFactory();
              Human human1 
= factory.getHuman("chinese");
              human1.sayHelloWorld(
"阿蜜果");

              Human human2 
= factory.getHuman("american");
              human2.sayHelloWorld(
"Amigo");
               }

 }

观察此例我们可以看到,该类不再与具体的实现类Chinese和American存在耦合关系,而只是与它们的接口类Human存在耦合关系,具体对象的获取只是通过传入字符串来获取,很大程度上降低了类与类之间的耦合性。

但是我们还是不太满足,因为还需要通过chinese和american在类中获取实例,那么当我们需要修改时实现时,我们还需要在类中修改这些字符串,那么还有没有更好的办法呢?让我们在下节中进行继续探讨。

三.             IOC粉墨登场

IOC(Inverse of Control)可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”。在Spring中,通过IOC可以将实现类、参数信息等配置在其对应的配置文件中,那么当需要更改实现类或参数信息时,只需要修改配置文件即可,这种方法在上例的基础上更进一步的降低了类与类之间的耦合。我们还可以对某对象所需要的其它对象进行注入,这种注入都是在配置文件中做的,Spring的IOC的实现原理利用的就是Java的反射机制, Spring还充当了工厂的角色,我们不需要自己建立工厂类。Spring的工厂类会帮我们完成配置文件的读取、利用反射机制注入对象等工作,我们可以通过bean的名称获取对应的对象。

下面让我们看看如下的模拟Spring的bean工厂类:

package  org.amigo.reflection;

import  java.io.InputStream;
import  java.lang.reflect.Method;
import  java.util.HashMap;
import  java.util.Iterator;
import  java.util.Map;
import  org.dom4j.Attribute;
import  org.dom4j.Document;
import  org.dom4j.Element;
import  org.dom4j.io.SAXReader;


public   class  BeanFactory  {
       
private Map<String, Object> beanMap = new HashMap<String, Object>();

       

       
public void init(String xml) {
              
try {
                     
//读取指定的配置文件
                     SAXReader reader = new SAXReader();
                     ClassLoader classLoader 
= Thread.currentThread().getContextClassLoader();
                     
//从class目录下获取指定的xml文件
                     InputStream ins = classLoader.getResourceAsStream(xml);
                     Document doc 
= reader.read(ins);
                     Element root 
= doc.getRootElement();   
                     Element foo;
                     
//遍历bean
                     for (Iterator i = root.elementIterator("bean"); i.hasNext();) {   
                            foo 
= (Element) i.next();
                            
//获取bean的属性id和class
                            Attribute id = foo.attribute("id");   
                            Attribute cls 
= foo.attribute("class");
                            
//利用Java反射机制,通过class的名称获取Class对象
                            Class bean = Class.forName(cls.getText());
                            
//获取对应class的信息
                            java.beans.BeanInfo info = java.beans.Introspector.getBeanInfo(bean);
                            
//获取其属性描述
java.beans.PropertyDescriptor pd[] = info.getPropertyDescriptors();
                            
//设置值的方法
                            Method mSet = null;
                            
//创建一个对象
                            Object obj = bean.newInstance();
                            
//遍历该bean的property属性
                            for (Iterator ite = foo.elementIterator("property"); ite.hasNext();) {   
                                   Element foo2 
= (Element) ite.next();
                                   
//获取该property的name属性
                                   Attribute name = foo2.attribute("name");
                                  String value 
= null;
                                   
//获取该property的子元素value的值
                                   for(Iterator ite1 = foo2.elementIterator("value"); ite1.hasNext();) {
                                          Element node 
= (Element) ite1.next();                                          value = node.getText();
break;
                                    }

                                   
for (int k = 0; k < pd.length; k++) {
                                          
if (pd[k].getName().equalsIgnoreCase(name.getText())) {                                             mSet = pd[k].getWriteMethod();
//利用Java的反射极致调用对象的某个set方法,并将值设置进去                                              mSet.invoke(obj, value);
 
}

 }

 }


//将对象放入beanMap中,其中key为id值,value为对象
beanMap.put(id.getText(), obj);
 }

}
 catch (Exception e) {
    System.out.println(e.toString());
 }

 }


       

       
public Object getBean(String beanName) {
              Object obj 
= beanMap.get(beanName);
              
return obj;
        }


       

       
public static void main(String[] args) {
             BeanFactory factory 
= new BeanFactory();
              factory.init(
"config.xml");
              JavaBean javaBean 
= (JavaBean) factory.getBean("javaBean");
              System.out.println(
"userName=" + javaBean.getUserName());
              System.out.println(
"password=" + javaBean.getPassword());
        }

 }

该类的init(xml)方法,通过指定的xml来给对象注入属性,为了对该类进行测试,我还需要新建一个JavaBean和在src目录下新建一个名为config.xml的配置文件。JavaBean的内容如下:

package  org.amigo.reflection;


public   class  JavaBean  {
       
private String userName;
       
private String password;

    
public String getPassword() {
              
return password;
        }


       
public String getUserName() {
              
return userName;
        }


       
public void setUserName(String userName) {
              
this.userName = userName;
        }


       
public void setPassword(String password) {
              
this.password = password;
        }

 }

 

这个简单bean对象中有两个属性,分别为userName和password,下面我们在配置文件config.xml中对其属性注入对应的属性值。配置文件内容如下:

<? xml version="1.0" encoding="UTF-8" ?>

< beans >
    
< bean  id ="javaBean"  class ="org.amigo.reflection.JavaBean" >
       
< property  name ="userName" >
           
< value > 阿蜜果 </ value >
       
</ property >
       
< property  name ="password" >
           
< value > 12345678 </ value >
       
</ property >
    
</ bean >
</ beans >

类与配置文件都完成后,可以运行BeanFactory.java文件,控制台显示内容为:

userName=阿蜜果

password=12345678

可以看到,虽然在main()方法中没有对属性赋值,但属性值已经被注入,在BeanFactory类中的Class bean = Class.forName(cls.getText());通过类名来获取对应的类,mSet.invoke(obj, value);通过invoke方法来调用特定对象的特定方法,实现的原理都是基于Java的反射机制,在此我们有一次见证了Java反射机制的强大。

当然,这只是对IOC的一个简单演示,在Spring中,情况要复杂得多,例如,可以一个bean引用另一个bean,还可以有多个配置文件、通过多种方式载入配置文件等等。不过原理还是采用Java的反射机制来实现IOC的。

四.             总结

在本文中,笔者通过讲述Java反射机制概述与初探、IOC使用的背景、IOC粉墨登场等内容,演示了Java反射机制API的强大功能,并通过编写自己的简单的IOC框架,让读者更好的理解了IOC的实现原理。

本文通过IOC的一个简要实现实例,模拟了Spring中IOC的实现,虽然只是完成了Spring中依赖注入的一小部分工作,但是很好的展现了Java反射机制在Spring中的应用,能使我们能更好的从原理上了解IOC的实现,也能为我们实现自己的准Spring框架提供方案,有兴趣的朋友可以通过Spring的源码进行IOC的进一步的学习。

springIoc实现原理 spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合 立即下载

相关推荐

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5561

Spring IoC实现及原理

快速了解spring实现与底层原理

Guo_Liwei的博客 4278

使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第一部分

American fuzzy lop 是一款面向安全的模糊测试器,它采用一种新型的编译时插桩和遗传算法,可以自动发现干净、有趣的测试用例,从而触发目标二进制文件中新的内部状态。这显著提高了模糊测试代码的功能覆盖率。AFL 的地址是它已经有一段时间没有更新了。虽然 AFL 仍然运行良好,但有一个新项目 AFL++,它是 AFL 的一个分支,包含许多改进和新功能。AFL++ 的地址是,其源代码位于。在本文中,我们将研究如何使用 AFL++ 对 IoT 二进制文件进行模糊测试。

技术超强的网络安全平台 1084

spring IOC 机制模拟实现

最近对spring IOC AOP 机制实现原理了解了下,在此做下整理,希望能给需要的朋友予以帮助。整理的资料来自互联网,文章开头是我写的测试代码例子,可以直接导入eclipse,别忘了导入dom4jjar包。 例子代码下载链接:http://download.youkuaiyun.com/source/630961 利用java的反射和动态代理实现IOC       在Java中,其反射

丁辉-blog 2784

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈 亲,当你点开看这篇文章,就说明你知道我想要干什么事情,或者说,你知道在 Windows 的内核种绕开它的网络协议,再独立构建一个网络协议栈的意义。如果你要问我有 windows 系统的网络协议栈不用,移植 lwip 有什么意义,那么你可以关闭链接走人了,因为这篇文章不适合你,它不是讲 lwip 移植原理的。 经常关注我的博客的朋...

oRbIt 的专栏 3576

LIGGGHTS开源离散元仿真:从基础安装到高级应用实战

本文详细介绍了LIGGGHTS开源离散元仿真软件的基础安装、脚本编写及高级应用实战。从颗粒自由落体模拟到工业级复杂系统建模,涵盖CFD-DEM耦合、高性能计算优化等关键技术,帮助用户快速掌握这一强大的颗粒仿真工具。特别适合需要处理颗粒系统仿真的科研人员和工程师。

l1k9j8h7g6的博客 619

【Spring】IOC与解耦合

回想写过的图书管理系统、租房系统、电影院卖票系统都是基于原生的JavaSE、OOP,没有用到任何框架,在层与层的关系中一个类要想获得与其他类的联系主要的方式还是靠new,这就导致层与层之间、对象与对象之间的依赖性强“动一发而迁全身”。特别是在处理数据层和业务层之间时,由于对象没有统一管理导致很复杂!而Spring中的IOC就很好地解决了这一问题,降低耦合就是它的一大特色...........................

懒羊羊的博客 8451

从 Non-Unicode 到 Unicode:ABAP 程序切换的坑、原理与工程化落地指南

摘要 老SAP系统中ABAP程序员常假设1字符=1字节,导致大量代码依赖单字节处理逻辑。Unicode系统的引入彻底改变了字符长度、偏移量等底层认知,强制要求程序遵循Unicode规则。关键问题包括:字符/字节语义混淆、结构体访问风险、以及ABAP语言版本的门槛限制。迁移时需要重点关注字符串处理、二进制协议解析等场景,利用UCCHECK、RSUNISCAN_FINAL等工具扫描风险,并通过持续集成机制确保代码质量。建议在Non-Unicode阶段就启用unicode_check参数模拟严格模式,分批次修复问

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3449

IOC实现原理

一.为什么用IOC IOC控制反转 ,目的为了让我们编写出更加松耦合,更加优雅的程序。传统的程序需要我们在类的内部显示的创建依赖对象。从而导致类与类之间的耦合度过高。,将对象的创建,查找依赖,以及生命周期的控制权交给了 Ioc 容器。对象之间 耦合较松,更加灵活。 二.IOC的实现原理 IOC实现的基础是工厂模式和反射机制 但是对于传统的工厂模式,如果增加新的水果类,就需要改动工厂类,采用反射的方...

qq_40495860的博客 5977

YOLO11改进 | 卷积模块 | 轻量化GSConv替换普通的conv

yolo11,GSConv,卷积模块

kay_545 3955

连接参数详解:Connection Interval, Slave Latency, Supervision Timeout 的协同与调优实战

在低功耗蓝牙(BLE)开发与调试中,Connection Interval(连接间隔)、Slave Latency(从机延迟) 和 Supervision Timeout(监督超时) 是三个核心参数。它们不仅直接影响设备的通信性能、功耗表现和连接稳定性,更是各类技术面试与认证考试的高频考点。本文将从基础概念出发,深入剖析三者的协同机制,结合历年真题解析考点与解题思路,并通过实战案例演示调优方法,快速掌握这一核心知识点。

byte轻骑兵的技术小窝 2761

《Spring》IOC实现原理

《Spring》IOC实现原理1. 概述2. 依赖倒置3. 控制反转4. 常用容器4.1 BeanFactory4.2 ApplicationContext5. Bean的作用域6. Bean的生命周期 1. 概述 IOC(Inversion of Control)控制反转,也称为DI(Dependency Injection)依赖注入。所谓IOC ,就是把原先代码里需要开发者实现的对象创建和关系依赖,反转交给SpringIOC容器管理对象的生命周期和对象之间的依赖关系。 Spring通过配置文件描述Be

飞飙的蜗牛 1万+

【数字孪生与仿真技术】05:从原理到实战:MATLAB/Simulink在航空航天GNC系统开发中的深度解析(含全流程代码与认证指南)

摘要:本文系统阐述MATLAB/Simulink在航空航天制导、导航与控制(GNC)系统开发中的核心应用。通过解析GNC系统高保真动力学建模、多源导航传感器融合、鲁棒控制算法设计等关键技术原理,结合Virgin Orbit运载火箭、CubeSat等真实案例,展示从需求分析、模型搭建、仿真验证到代码生成与认证的完整开发流程。文中提供1200余行关键代码、8个可复用Simulink模型及详细执行结果展示,涵盖DO-178C认证支持、实时性能优化等工业级开发规范,为航空航天工程师、科研人员提供可落地的参考方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1656

spring IOC 具体实现原理,模拟代码

IOC 控制反转 其实spring底层用的是工厂设计模式, 下面逐步实现控制反转。 案列 在包com.westos2.ioc下 目录结构 ATest类 BTest类,类中属性有ATest aTest; 要求生产一个A对象,生产一个B对象(内包含A)。 代码ATest package com.westos2.ioc; public class ATest { public v...

Prodigal 1306

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

简单模拟spring IOC底层实现原理

工厂 + 反射+配置文件实现代码如下:   /**  * @author xiangshuai  * 所在位置:E:\学习文档子目录压缩\框架\spring\简单模拟spring IOC底层实现原理   或 我的网盘/我的笔记/学习文档子目录压缩/框架/spring/简单模拟spring IOC底层实现原理 *  */   BeanFactory.java package ...

香帅的博客 556

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

模拟Spring IOC 控制反转实现原理

Servlet监听器前言生活案例引入代码案例构建纯净类1、传统方式构建实例纯净类的工厂类BookFactory2、传统方式上升级3、通过简单反射升级4、类似Spring容器的工厂构建XML文件类似"Spring容器"类模拟"Spring容器"构建实例模拟"Spring容器"构建实例步骤总结Spring IOC获取实例步骤总结 前言         Spring IOC控制反转是通过反射机制与工厂模式的结合,下面给大家模拟一下 生

上进的小仓鼠 448

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring源码学习之:模拟实现BeanFactory,从而说明IOC容器的大致原理

spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了。那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后就会对spring的原理有一定的了解。   spring使用BeanFactory来实例化、配置和管理对象,但是它只是一个接口,里面有一个getBean()...

weixin_34072637的博客 85

自己模拟实现spring ioc原理

JSON配置文件的数据结构: package light.zhang.ioc.bean; import java.io.Serializable; import java.util.List; import lombok.Data; import lombok.ToString; /** * 数据结构 * @author witts */ @Data ...

weixin_33895604的博客 94

Spring原理自我实践之IOC的模拟实现

在学习Spring的过程中,为了更加透彻的理解IOC容器,在讲师的分析下,自我实践了一下IOC的模拟实现:[b] Class_1:核心的模拟IOC类,其中注释已经十分清晰[/b] [code="java"]package com.java.mySpring; import java.util.HashMap; import java.util.Map; import co...

热爱我的热爱 167

利用java反射机制模拟spring IOC原理的实现

IOC模式与JAVA反射机制 在Java中反射和动态代理机制很强大,通过反射机制在运行时获取信息。用于实现IOC。 代理是Java基本的设计模式,提供向对象插入额外的或不同的操作。Java的动态代理能动态的创建代理对象,以及动态的调用代理方法。用于实现AOP。 一、Java反射机制 1、作用 (1)在运行时判断任意一个对象所属的类; (2)在运行时获取类

至尊宝 1321

反射模拟实现spring的getBean方法 帮助理解IoC底层原理 简单易懂

IoC(Inversion of Control) 控制反转,是spring框架的核心。DI(dependency injection)依赖注入是IoC 的核心。 IoC控制反转到底反转了什么? 依赖对象的创建和依赖关系的形成,解耦。 spring不用自己创建对象,只需要在配置文件中配置属性就可以对其实现赋值。依赖注入底层是如何实现的呢,今天就用反射来手动实现getBean()方法。 项...

fluetty--成长中的菜鸟 1149
上一篇: hibernate运行机制
下一篇: 解析XML的4种方式
andyLiuJava
博客等级 码龄14年 0粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值