1、我们来体验一下Spring底层两大思想中IOC(Inverse Of Control)

2、IOC控制反转主要利用的就是Java强大的反射机制

这里并没有写数据层,有兴趣的同学可以通过流的方式,来创建我们需要的对象

1)创建一个testreflect的包,然后写MockSpring类的方法getBean

package testreflect;

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Scanner;

public class MockSpring {

public Object getBean (String className) {

Object obj = null;

Scanner input = new Scanner(System.in);

try{

//获取类

Class clazz = Class.forName(className);

//获取对象

obj = clazz.newInstance();

String name = clazz.getSimpleName();

if(name.equals("Character")){

System.out.println("Incompatible Type.");

}else{

Field[] fields = clazz.getDeclaredFields();

for(Field f:fields){

String fieldName = f.getName();

System.out.println("请设置"+fieldName+"属性:");

//获取setName类似的驼峰属性设置方法

StringBuilder sb = new StringBuilder("set");

sb.append(fieldName.substring(0,1).toUpperCase().concat(fieldName.substring(1)));

String value = input.nextLine();

//获取属性的类型,比如name的String类

Class fieldType = f.getType();

//获取带String参数的构造函数

Constructor con = fieldType.getConstructor(String.class);

//获取方法

Method m = clazz.getDeclaredMethod(sb.toString(),fieldType);

m.setAccessible(true);

m.invoke(obj,con.newInstance(value));

}

}

}catch(Exception e){

e.printStackTrace();

}

return obj;

}

}

2)创建一个测试类

注意:要有set方法,我们的目的是以后从文件读取的流能直接转为对象

package testreflect;

public class Person {

private String name;

private Integer age;

private String sex;

public Person () {}

public Person (String name,Integer age,String sex){

this.name = name;

this.age = age;

this.sex = sex;

}

public void setName (String name){

this.name = name;

}

public void setAge (Integer age){

this.age = age;

}

public void setSex (String sex){

this.sex = sex;

}

public String getName (){

return this.name;

}

}

3)测试

package testreflect;

public class Test {

public static void main (String[] args){

MockSpring ms = new MockSpring();

Person p = (Person)ms.getBean("testreflect.Person");

System.out.println(p.getName());

}

}

4)根据提示设置name,age,sex属性为"飞鸿","18","男"

output:飞鸿

java ioc_Java体验IOC相关推荐

  1. Java反射及 IoC原理、内省机制

    JAVA反射及IoC原理.JAVA内省 1. 反射 反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述 主要指程 ...

  2. ganymed ssh-2 for java,SSH客户端开发开源组件Ganymed SSH-2 for Java初体验,ganymedssh-2

    SSH客户端开发开源组件Ganymed SSH-2 for Java初体验,ganymedssh-2 1.Ganymed SSH-2 for Java Ganymed SSH-2 for Java是一 ...

  3. 基于JAVA家居体验平台的设计与实现计算机毕业设计源码+系统+lw文档+部署

    基于JAVA家居体验平台的设计与实现计算机毕业设计源码+系统+lw文档+部署 基于JAVA家居体验平台的设计与实现计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  4. Java Spring的IoC和AOP的知识点速记

    Spring简介 Spring解决的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,这个是通过Spring的依赖注入机制实现的. Spring Bean装配 1. IOC的概念以及在Spri ...

  5. java代码初体验_第一次Java 8体验

    java代码初体验 像世界其他地方一样,我深深地爱上了Slack. 为什么? 原因很多,但主要的原因是它提供了一种围绕通讯而非工具真正构建SDLC流程的新方法. 您认为这些天哪个更常见,杂乱无章的机智 ...

  6. ioc中最基本的JAVA技术_Spring IOC 知识点总结

    广义的 IOC 在这之前,我们先记住一句话.好莱坞原则:Don't call me, we will call you. 即"不用打电话过来,我们会打给你". 控制反转(Inver ...

  7. [Java] 什么是IoC?什么是DI?它们的区别是什么?

    文章目录 前言 IoC IoC的两种应用 IoC容器 约定大于配置 IoC容器的优点 应用流程框架 DI 结语 参考 前言 学习应用程序框架永远绕不过的一个话题就是控制反转(IoC)和依赖注入(DI) ...

  8. Java之Spring5:IOC容器

    IOC容器 什么是IOC容器 IOC容器中的Bean 小试牛刀 搭建Spring5环境 写一个HelloWorld IOC底层原理 IOC的Bean管理 基于 xml 方式创建对象 基于 xml 方式 ...

  9. 通俗讲java反射机制ioc,结合反射说明SpringIOC的实现原理

    packagecom.sinoair.gtms.controller.web.IOC;importjavax.annotation.Resource;importjavax.xml.ws.Servic ...

最新文章

  1. Linux网络相关、firewalld、netfilter及其5表5链、iptables语法
  2. jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
  3. 干货 | 林轩田机器学习「基石+技法」历史文章汇总
  4. Express + mongoDB + nodejs
  5. Mendix入局中国低代码,开发者们你准备好了吗
  6. jQuery Event 模块 源码浅解
  7. web.xml文件中mime-mapping
  8. linux命令行彩蛋,技术|11个无用而有趣的Linux终端彩蛋
  9. rp文件chrome浏览器查看插件
  10. 【不存在的人】用Python获取生成随机头像,还不侵权
  11. 计算机毕业设计的读书笔记,毕业设计之读书笔记
  12. oracle的varchar用法,Oracle数据库中的varchar,varchar2,nvarchar,nvarchar2区别及用法
  13. 【毕业设计8】基于STM32的红外测距系统
  14. please execute the cleanup command
  15. unity项目之太空大战(2)
  16. BLE安全之SM剖析(1)
  17. AMD/CMD/CommonJs到底是什么?它们有什么区别?
  18. html打开方式怎么没有反应,为什么我点开启程序没反应
  19. 创客匠人年度共创峰会圆满落幕
  20. 蓝桥杯第十届真题B组(2019年)

热门文章

  1. Spark基础学习笔记13:Scala函数
  2. 从Scala2.13.0开始废弃了一些方法
  3. 大数据学习笔记21:MR案例——分区全排序
  4. 无心剑中译阿齐姆·普雷姆吉《苦干加巧干》
  5. 2017.9.8 线性代数 失败总结
  6. android解析布局树,Android Viewtreeobserver解析
  7. python计算excel crc_python实现计算资源图标crc值的方法
  8. click事件在什么时候出发_什么是移动端?
  9. linux mysql 没有密码忘记,在linux系统中,如果忘记了MySQL的root密码,有没有办法重新设置新密码呢?...
  10. 代码管理工具TortoiseGit配置(GIT的客户端)