java反射ioc_基于Java反射技术实现简单IOC容器

前言

首先思考一个问题,如果你正在做一个复杂的系统,一个系统模块内有几百个功能业务类,这些类需要使用同一些对象来进行工作。那么,你会怎样去管理这些通用且一样的对象呢?

学习过Spring的朋友会知道,Spring框架为此提供了一种非常先进的思想,即IOC(控制反转)。Spring可以理解为一个工厂,负责对象的创建和对象间关系的维护。IoC即控制反转,简单说就是之前需要使用new的方式创建对象,而Spring框架会从XML文件中根据配置的信息来创建对象,然后放进它自己的容器之中。在程序要使用到该对象的时候,自动注入。

下面就来做一个最简单的IOC容器。

1.创建一个实体类,比如学生类,汽车类

2.创建XML文件配置对象的信息

3.编写一个IOC容器类。这个类工作起来,首先加载XML文件,扫描自己配置的对象信息,之后使用反射技术创建对象,最后将这些

对象放进自己的Map集合中(容器)。外部想要调用这些对象,那么就使用Map的键,来拿到这个集合中对应的值(对象)。

862b0e636a1774de4402d7a8f136998c.png

编写一个喜闻乐见的Student学生类。

我做的比较简单,没有使用get() set()方法。

后面使用反射技术可以强制给 private 修饰的属性赋值

package cn.haidnor.bean;

public class Student {

/** 学生姓名 */

private String name;

/** 学生性别 */

private String gender;

/** 学生年龄 */

private int age;

@Override

public String toString() {

return "Student{" +

"name='" + name + '\'' +

", gender='" + gender + '\'' +

", age=" + age +

'}';

}

}

创建XML文件,配置对象信息

id 表示在IOC容器(Map)的键

class 表示对象类的全类名

name 表示对象的各种属性名

property下的文本节点表示该属性的值

Lucy

18

female

Tom

21

male

LiLi

23

female

编写IOC容器类

1.首先根据XML中的配置文件,生成学生对象

2.所有的对象都放入到一个Map中

3.提供一个getBean()的方法,传入配置文件中的id,返回对应的对象

package cn.haidnor.core;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBCBExmclass java.lang.Long":

case "long":

field.setLong(instance, Long.parseLong(attributes.get(name)));

break;

case "class java.lang.Short":

case "short":

field.setShort(instance, Short.parseShort(attributes.get(name)));

break;

default:

field.set(instance, attributes.get(name));

break;

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

最后编写测试类

不使用new的方式创建学生对象

使用ioc容器getBean()方法获取对象

调用对象的复写的toString()方法

package http://www.cppcns.comcn.haidnor.test;

import cn.haidnor.bean.Student;

import cn.haidnor.core.SpringIOC;

public class Test {

public static void main(String[] args) {

// 不使用 new 的方式创建对象, 从容器中获取

Student stu1 = (Student) SpringIOC.getBean("stu3");

// 调用学生类的方法,打印信息

System.out.println(stu1.toString());

}

}

运行结果,控制台打印输出的内容

Student{name='LiLi', gender='female', age=23}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: 基于Java反射技术实现简单IOC容器

本文地址: http://www.cppcns.com/ruanjian/java/324731.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值