利用JAVA反射机制来简单解释一下IOC实现原理,当然SPRING实现的更完善,但使用的原理和技术是类似;
典型的SPRING IOC 配置代码片段,如何自己使用反射实现见JAVA代码;
<bean id="javabean" class="com.sunshine.test.TestReflect">
<property name="field1" value="test" />
<property name="otherField1" value="AAAA" />
</bean>
package com.sunshine.test;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class TestReflect {
private String field1;
private String field2;
@Override
public String toString() {
return "TestReflect [field1=" + field1 + ", field2=" + field2 + "]";
}
/**
* @param args
* @throws Exception
*
* <bean id="javabean" class="com.sunshine.test.TestReflect">
* <property name="field1" value="test" />
* <property name="otherField1" value="AAAA" />
* </bean>
*/
public static void main(String[] args) throws Exception {
Map<String, Object> context = new HashMap<String, Object>();
String className = TestReflect.class.getName();
String property1 = "field1";
System.out.println("spring 中配置的类名:" + className);
// ----------1.模拟SPRING 利用配置的class 来创建对象实例
Class clazz = Class.forName(className);
Object object = clazz.newInstance();
if (object instanceof TestReflect) {
System.out.println("spring 调用默认构造函数后产生实例:" + object);
}
// ---------2.模拟SPRING 利用配置的property 来进行属性赋值--
Method logMethod = clazz.getDeclaredMethod("set" + "F" + "ield1",
String.class);
logMethod.invoke(object, "test");
System.out.println("spring 实例 的属性赋值后:" + object);
// ---------3.正确理解SPRING属性赋值,其实是调用set方法[set+属性(注意需要大写第一个字母后]来赋值 --
String property2 = "otherField1";
logMethod = clazz.getDeclaredMethod("set" + "O" + "therField1",
String.class);
logMethod.invoke(object, "AAAA");
System.out.println("spring 实例 的属性赋值后:" + object);
// ----------4.模拟SPRING 容器--------------
context.put("javabean", object);
// ---------5 .模拟SPRING 容器取对象-----
Object newObject = context.get("javabean");
System.out.println("spring 取对象:" + newObject);
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public void setOtherField1(String field) {
this.field2 = field;
}
}
分享到:
相关推荐
理解并模拟Spring的IOC机制对于深入学习Spring以及提升软件设计能力具有重要意义。 **1. 控制反转(IOC)概念** 控制反转是一种设计思想,它将对象的创建和管理权交给容器,而不是由对象自身负责。这样可以降低对象...
本文将深入探讨Spring IOC的概念、工作原理以及如何通过反射来实现这一机制。 首先,理解控制反转(IOC)的概念至关重要。在传统的编程模式中,开发者需要手动创建并管理对象,而在IOC中,这种控制权反转给了容器,...
这篇博客“java模拟spring ioc”很可能是探讨如何在没有Spring框架的情况下,使用纯Java代码来实现类似Spring的IOC功能。以下将详细介绍Spring的IOC和DI概念以及如何模拟这些概念。 **依赖注入(Dependency ...
在这个名为"spring_IOC实现(墨者革离)"的项目中,我们可以通过模拟城门叩问的编剧场景来理解这一概念。 首先,控制反转的基本思想是将对象的创建和依赖关系的管理从应用程序中分离出来,交给一个外部容器(在...
这个练习分为三个主要部分,旨在帮助我们掌握XML配置文件的读取,模拟Spring的IoC机制,以及对Struts框架的简单模拟。下面将逐一解析这些知识点。 **1. XML读取** XML(Extensible Markup Language)是一种通用的...
这通常通过反射机制实现,根据类名动态创建对象。 4. **依赖注入**:接下来是关键的DI部分。`BeanFactory`不仅创建Bean,还要负责将它们的依赖关系设置好。这可以通过调用setter方法或者构造函数注入来实现。 5. *...
在Java开发领域,Spring...通过这个模拟项目,开发者可以深入了解Spring IoC的基本原理,学习如何在没有Spring框架的情况下手动管理对象的生命周期和依赖关系,这对于理解Spring框架的工作机制和优化代码结构大有裨益。
现在,我们将深入探讨如何模拟Spring的IoC容器实现注解自动装配。 首先,我们需要理解IoC容器的基本工作原理。IoC容器是通过扫描应用程序上下文来发现所有需要管理的bean,并根据bean定义来创建和初始化这些bean。...
本篇文章将详细探讨如何利用jdom2解析XML文档以及通过反射机制来模拟Spring的IoC功能。 首先,理解IoC的基本概念。IoC意味着不再由应用程序直接创建对象,而是由一个容器(如Spring IoC容器)来负责对象的生命周期...
本教程将深入探讨如何模拟Spring框架的IOC(Inversion of Control,控制反转)功能,特别关注XML配置文件的解析。 首先,我们需要理解什么是IOC。控制反转是一种设计原则,它将对象的创建和管理从对象本身剥离出来...
这篇博客"使用反射和注解模拟Spring的依赖注入"探讨了如何通过基本的Java特性来实现类似Spring的功能。我们将深入探讨反射和注解这两个关键概念,以及它们如何在模拟依赖注入中发挥作用。 首先,让我们理解反射的...
3. 如果一切正常,你会看到使用Java集合、XML API,以及反射技术模拟Spring的get注入和自定义的IoC容器实现的例子--get注入了Hello类和一个MyFrame类,并且实例化之后可以运行! 4. 看一下testDemoSpringDI()方法,...
/*模拟spring的实现 * 1.通过构造器获取配置文件 * 2.通过dom4j解析配置文件,得到list集合(存放Bean标签的id和class属性) * 3.通过反射实例化得到对应的实例化对象,放置在map中(map是键值对,可根据id获取值)...
本文将通过注解方式来模拟Spring的IoC和AOP,帮助你深入理解这两个概念的实现原理。 **一、依赖注入(IoC)** 依赖注入是Spring框架的核心特性,它使得对象之间的依赖关系由容器管理,而不是由对象自身管理。在...
标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...
通过使用Java注解,我们可以模拟Spring IOC容器的过程,实现依赖注入和控制反转。 在下面的示例代码中,我们将使用Java注解来模拟Spring IOC容器的过程。首先,我们定义了两个注解:Component和Value。Component...
本文将深入探讨如何利用Java中的反射(Reflection)与依赖注入(Inversion of Control, 简称IOC)来构建一个灵活的插件架构,实现业务流程处理。这种架构允许我们在运行时动态加载、管理和替换组件,从而提高代码的可...
3. **构建IoC容器**:模拟Spring的IoC容器,我们需要一个类来存储和管理对象。这个类可以包含一个Map来保存对象,以及方法来注册和获取对象。 ```java public class SimpleIOCContainer { private Map, Object> ...
模拟Spring的依赖注入,旨在理解其核心机制,让我们一起深入探讨这一主题。 首先,我们要明白什么是依赖注入。在传统的编程中,一个对象通常会直接创建或查找它所依赖的对象,这会导致类之间的紧密耦合。依赖注入则...
首先,`BeanFactory.java`很可能是模拟Spring的`ApplicationContext`或`BeanFactory`,它是IOC容器的核心,负责管理和实例化对象。在Spring中,`BeanFactory`是一个接口,用于加载和管理Bean定义,提供Bean的实例。...