首先定义一个接口:
public interface Action {
String excute(String msg);
}
然后定义一个类,来实现这个接口:
public class UppperCaseAction implements Action{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String excute(String msg) {
return (message+" "+msg).toUpperCase();
}
}
然后就是配置文件了:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean name="uppercase" class="com.hcy.Spring.UppperCaseAction">
<property name="message">
<value>hello</value>
</property>
</bean>
</beans>
通过反射获取bean实例的类:
package com.hcy.model;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import com.hcy.opxml.Mapping;
import com.hcy.opxml.ParseXml;
public class ApplicationContext {
private static HashMap<String,Mapping> map=null;
static{
map=ParseXml.ParseApplicationContext();
}
public Object getBean(String id){
Object obj=null;
Method[] methods=null;
try {
System.out.println(map.get(id).getClassName());
Class clz=Class.forName(map.get(id).getClassName());
obj=clz.newInstance();
methods=clz.getMethods();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(Method m:methods){
if(m.getName().equalsIgnoreCase(("set"+map.get(id).getProperty()))){
try {
m.invoke(obj, new Object[]{map.get(id).getValue()});
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(obj.toString());
return obj;
}
}
解析xml的类:
package com.hcy.opxml;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class ParseXml {
private static HashMap<String ,Mapping> map=new HashMap<String ,Mapping>();
public static HashMap<String,Mapping> ParseApplicationContext(){
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=null;
try {
builder=factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Document doc=null;
try {
doc = builder.parse(new File("src/applicationContext.xml"));
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
NodeList nodes=doc.getElementsByTagName("bean");
for(int i=0;i<nodes.getLength();i++){
Element e=(Element)nodes.item(i);
String id=e.getAttribute("name");
String className=e.getAttribute("class");
nodes=e.getElementsByTagName("property");
for(int j=0;j<nodes.getLength();j++){
e=(Element)nodes.item(j);
String property=e.getAttribute("name");
String value=e.getElementsByTagName("value").item(0).getFirstChild().getNodeValue();
Mapping mapping=new Mapping();
mapping.setClassName(className);
mapping.setId(id);
mapping.setProperty(property);
mapping.setValue(value);
System.out.println(id+" "+className+" "+property+" "+value);
map.put(mapping.getId(), mapping);
}
}
return map;
}
public static void main(String[] args){
ParseXml px=new ParseXml();
px.ParseApplicationContext();
}
}
通过xml当中的配置,与对应的类对应起来,准确地得到bean的实例:
package com.hcy.opxml;
public class Mapping {
private String id;
private String className;
private String property;
private String value;
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
接下来就是测试类:
public static void main(String[] args) {
ApplicationContext ac=new FileSystemXmlApplicationContext("src/applicationContext.xml");
//通过反射机制得到bean的实例
Action act=(Action)ac.getBean("uppercase");
System.out.println(act.excute("yes"));
}
分享到:
相关推荐
本篇将通过简单模拟Spring框架原理,帮助你深入理解这两个概念。 首先,我们要知道Spring是如何实现IoC的。IoC的核心思想是将对象的创建和管理权交给容器,而不是由对象自身负责。在Spring中,我们通过定义Bean ...
我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring框架——从一个...
【标题】手动实现的简单Spring框架 在Java Web开发领域,Spring框架是一个极其重要的存在,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)架构等。本项目是基于对Spring框架核心...
本项目"自主实现的简易Spring框架"显然是对Spring核心功能的一种简化版实现,旨在帮助开发者深入理解Spring的核心机制。 首先,我们来讨论一下Spring的核心组件——IoC(Inversion of Control)容器。IoC也被称为...
一、Spring 框架原理 Spring 框架是 SSM 框架的核心组件之一,它提供了一个轻量级的框架来实现依赖注入、AOP 等功能。Spring 框架的核心是 IoC 容器,它可以管理应用程序中的对象生命周期,并提供了便捷的方式来...
这个压缩包包含了关于Spring框架的基本介绍以及一些示例源码,非常适合初学者或者需要深入理解Spring工作原理的开发者进行学习。 首先,我们来详细了解Spring的核心特性: 1. **依赖注入(Dependency Injection, ...
Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)能力而著名。SSH框架则是Spring、Struts和Hibernate三个...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》这本书主要聚焦于Spring框架的核心架构和技术细节,帮助读者全面理解Spring的工作机制、设计理念以及实现方式。下面将根据书名及其描述来展开相关知识点。 ...
以上就是Spring框架学习的一些基本知识点,包括Spring的定义、优点、IoC和DI的原理、耦合度的概念和控制、以及如何在项目中引入和配置Spring。掌握这些知识点对于企业级开发人员来说十分重要,它们是开展工作和提高...
### Spring框架概述与核心原理 #### 一、Spring框架简介 Spring框架是一个广泛使用的开源Java平台,用于构建高质量的企业级应用程序。它最初由Rod Johnson在2004年创建,旨在简化企业级Java应用程序的开发过程。...
标题中的“自己动手写的类似spring框架”指的是一个教学示例,它是作者为了讲解Spring框架的基本原理而自制的一个简化版框架。这个框架的核心功能是模拟Spring的IoC(Inversion of Control,控制反转)容器,帮助...
《深入Spring2:轻量级J2EE开发框架原理与实践》是一本专注于Spring2版本的权威指南,它详尽地介绍了Spring框架的核心特性和实际应用。Spring作为Java开发领域中的一个基石,以其轻量级、模块化和依赖注入特性,极大...
Spring框架是中国Java开发领域中最广泛使用的轻量级框架之一,以其IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心特性,极大地简化了企业级应用的开发。...
Spring框架是Java开发中广泛应用的开源框架,以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)的核心特性,极大地简化了企业级应用的开发工作。2016版的Spring框架在...
Spring框架是中国著名的开源Java企业级应用开发框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中...对于初学者来说,这是一个很好的实践平台,有助于深入理解Spring框架的使用和原理。
《Spring框架模拟器详解——构建你的知识大厦》 在IT领域,Spring框架是Java开发中的一个基石,尤其在企业级应用开发中...每个步骤都包含了从简单到复杂的递进,确保你在实践中不断巩固和提升Spring框架的运用能力。
Spring框架是Java开发中最常用的轻量级开源框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。在本文中,我们将...
本文将深入探讨Spring MVC框架的工作原理和机制。 首先,我们来看看Spring MVC的核心组件——DispatcherServlet。DispatcherServlet是整个框架的入口点,它扮演着请求分发器的角色。在`web.xml`配置文件中,我们...
Spring框架是Java开发中的一个关键组件,由Rod Johnson创建,旨在提供一种更加轻量级、灵活的替代传统J2EE(现在的Java EE)开发方式。Spring最初的理念是反对过度复杂化的EJB(Enterprise JavaBeans)模型,提倡...
Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)。在"Spring框架基础包和依赖包.zip"中,包含的...