这里我们简单的实现一下spring中的初始化bean,以大概了解他的流程。受委屈几乎是一个人成长最快的途径,吃下去的是委屈,消化掉后得到的是格局。

spring的自定义初始化

测试的项目结构如下:

一、定义两个简单的Bean对象

  • FirstBean.java,变量需要set方法:
package com.spring1.bean;

public class FirstBean {
private String username;
private String password; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getUserInfo() {
return username + ", " + password;
}
}

FirstBean.java

  • SecondBean.java,变量需要set方法:
package com.spring1.bean;

public class SecondBean {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getUserInfo() {
return name + ", " + age;
}
}

SecondBean.java

二、定义一个管理Bean的工厂类BeanFactory

package com.spring1.factory;

import java.util.HashMap;
import java.util.Map; public class BeanFactory {
Map<String, Object> map = new HashMap<>(); public Object getBean(String key) {
return map.get(key);
} public <T> T getBean(String key, Class<T> tClass) {
return (T) map.get(key);
} public void setBean(String name, Object object) {
map.put(name, object);
}
}

三、定义一个解析xml文件,并把初始化的bean存放到beanFactory的类

package com.spring1.parse;

import com.spring1.SpringUtil;
import com.spring1.factory.BeanFactory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.List; public class ParseXmlBean {
public static BeanFactory parseXmlBean(String filepath) {
BeanFactory beanFactory = new BeanFactory();
SAXReader reader = new SAXReader();
try {
InputStream stream = ParseXmlBean.class.getClassLoader().getResourceAsStream(filepath);
Document document = reader.read(stream);
Element rootElement = document.getRootElement();
List<Element> entries = rootElement.elements("bean");
for (Element entry : entries) {
String beanId = entry.attributeValue("id");
String beanClass = entry.attributeValue("class");
Class<?> bean = Class.forName(beanClass);
Object beanObject = bean.newInstance();
for (Object subEntry : entry.elements("property")) {
String name = ((Element) subEntry).attributeValue("name");
String value = ((Element) subEntry).attributeValue("value");
String dataType = ((Element) subEntry).attributeValue("dataType");
Method method;
if (dataType == null) {
method = bean.getMethod(getMethodName(name), new Class[]{String.class});
method.invoke(beanObject, new Object[]{value});
} else if (dataType.equals("int")) {
method = bean.getMethod(getMethodName(name), new Class[]{int.class});
method.invoke(beanObject, new Object[]{Integer.valueOf(value)});
}
}
beanFactory.setBean(beanId, beanObject);
}
} catch (Exception e) {
e.printStackTrace();
}
return beanFactory;
} private static String getMethodName(String name) {
return "set" + SpringUtil.firstLetterUpper(name);
}
}

四、一个简单的工具类

package com.spring1;

public class SpringUtil {
public static String firstLetterUpper(String name) {
return name.substring(0, 1).toUpperCase() + name.substring(1);
}
}

五、测试的主体类如下

package com.spring1.main;

import com.spring1.bean.FirstBean;
import com.spring1.bean.SecondBean;
import com.spring1.factory.BeanFactory;
import com.spring1.parse.ParseXmlBean;
import org.junit.Test; public class MainTest {
@Test
public void test_1() {
BeanFactory beanFactory = ParseXmlBean.parseXmlBean("config/bean.xml");
FirstBean firstBean = beanFactory.getBean("firstBean", FirstBean.class);
String userInfo = firstBean.getUserInfo();
System.out.println(userInfo); SecondBean secondBean = (SecondBean) beanFactory.getBean("secondBean");
String userInfo1 = secondBean.getUserInfo();
System.out.println(userInfo1);
}
}

运行的结果如下:

huhx,
liuling,

六、测试的xml文件如下

<beans>
<bean id="firstBean" class="com.spring1.bean.FirstBean">
<property name="username" value="huhx"/>
<property name="password" value="1234"/>
</bean> <bean id="secondBean" class="com.spring1.bean.SecondBean">
<property name="age" value="21" dataType="int"/>
<property name="name" value="liuling"/>
</bean>
</beans>

友情链接

spring基础---->spring自定义初始化(一)的更多相关文章

  1. spring基础---->spring自定义标签(一)

    Spring具有一个基于架构的扩展机制,可以使用xml文件定义和配置bean.本博客将介绍如何编写自定义XML bean的解析器,并用实例来加以说明.其实我一直相信 等你出现的时候我就知道是你. Sp ...

  2. spring基础---->spring自定义初始化(二)

    这里新增了对ref属性的支持,并且过滤了已经解析的元素.人生有两个词很棒,一言不合和不提也罢. spring自定义对ref属性支持 项目的结构如下:新增一个ThirdBean类,修改了ParseXml ...

  3. spring基础学习01

    spring基础 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 IOC控制反转 把创建对象和维护对象之间的关系权利 ...

  4. Spring框架 - Spring和Spring框架组成

    Spring框架 - Spring和Spring框架组成 Spring是什么?它是怎么诞生的?有哪些主要的组件和核心功能呢? 本文通过这几个问题帮助你构筑Spring和Spring Framework ...

  5. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  6. Spring基础系列-容器启动流程(1)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9870339.html 概述 ​ 我说的容器启动流程涉及两种情况,SSM开发模式和Spri ...

  7. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  8. spring基础回顾

    1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...

  9. Spring基础知识详解

    Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...

随机推荐

  1. Unity GUI(uGUI)使用心得与性能总结

    Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...

  2. 详细分析Java中断机制[转]

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  3. 导入Maven项目后,Eclipse提示“Missing artifact ”类的错误

    导入Maven项目后,Eclipse提示“Missing artifact ”类的错误 标签: Maven Missing art 2016-08-15 16:05 679人阅读 评论(0) 收藏 举 ...

  4. js 创建多行字符串

    function heredoc(fn) { ,-).join('\n') + '\n' } var tmpl = heredoc(function(){/* !!! 5 html include h ...

  5. MySQL删除数据库时的错误

    From: http://blog.csdn.net/mydeman/article/details/6843398 由于在9月30号粗暴地打断了一个导入进程,今天发现MySQL竟然不能启动了,只好卸 ...

  6. winform利用itextsharp.dll实现图片文件转换PDF格式文件

    1.利用itextsharp.dll实现单个图片文件转换为PDF格式文件, 可以使用以下类: void ConvertJPG2PDF(string jpgfile, string pdf) { var ...

  7. ABBYY FineReader 12没你想得那么简单

    你是否觉得自己对ABBYY FineReader 12已经了如指掌了?也许你会认为它不过就是一款OCR文字识别软件,能够快速方便地将扫描纸质文档.PDF文件或者数码相机的图像转换为可编辑.可搜索的格式 ...

  8. Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题

    Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误: /lib64/libc.so.6: version `GLIBC_2.14' not fou ...

  9. MTK 锁屏配置

    常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,用户有时候在看电视或视频的时候不希望系统的锁屏 功能启动,既不想锁频,然而系统却在我们看电视或者视频的时候出来个锁屏的界面进行锁频拉,我们还要想 ...

  10. pycharm破解补丁的使用

    转自 https://www.cnblogs.com/lhuser/p/8040163.html 闲来无事,想学学python的爬虫 http://idea.lanyus.com/  破解补丁下载 或 ...