Spring(二)Spring对JavaBean的管理

部分与第一篇重复的内容省掉了。

用实体类保存JavaBean的配置信息

package test.spring.entity;

public class Bean {

	private String id;
	private String classPath;
	public Bean(String id, String classPath) {
		super();
		this.id = id;
		this.classPath = classPath;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getClassPath() {
		return classPath;
	}
	public void setClassPath(String classPath) {
		this.classPath = classPath;
	}

}

编码模拟Spring读取beanx.xml中的数据对JavaBean进行管理的过程,关键是xml格式文件的读取

package test.spring.jnit;

import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.transform.sax.SAXResult;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

import test.spring.entity.Bean;

public class BeanManageTest {

	private List<Bean> listOfBean = new ArrayList<Bean>();
	private Map<String, Object> sigletons = new HashMap<String, Object>();

	public BeanManageTest(String fileName) {
		this.readXML(fileName);
		this.instanceBeans();
	}

	private void instanceBeans() {
		// TODO Auto-generated method stub
		for (Bean bean : listOfBean) {
			try {
				if (bean.getClassPath() != null
						&& !"".equals(bean.getClassPath().trim()))
					sigletons.put(bean.getId(),
							Class.forName(bean.getClassPath()).newInstance());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	private void readXML(String fileName) {
		// TODO Auto-generated method stub
		SAXReader saxReader = new SAXReader();
		Document document = null;
		try {
			URL xmlPath = this.getClass().getClassLoader()
					.getResource(fileName);
			document = saxReader.read(xmlPath);
			Map<String, String> map = new HashMap<String, String>();
			map.put("ns", "http://www.springframework.org/schema/beans");// 加入命名空间
			XPath xPath = document.createXPath("//ns:beans/ns:bean");
			xPath.setNamespaceURIs(map);
			List<Element> beans = xPath.selectNodes(document);
			for (Element element : beans) {
				String id = element.attributeValue("id");
				String classPath = element.attributeValue("class");
				Bean bean = new Bean(id, classPath);
				listOfBean.add(bean);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	public Object getBean(String beanName) {
		return this.sigletons.get(beanName);
	}

}

结果一样,调用方式有所改变

package test.spring.jnit;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import test.spring.service.PersonService;

public class SpringTest {

	@Test
	public void testInstanceSpring() {
		// ApplicationContext applicationContext = new
		// ClassPathXmlApplicationContext(
		// new String[] { "beans.xml" });
		// ApplicationContext applicationContext = new
		// ClassPathXmlApplicationContext(
		// "beans.xml");
		// PersonService personService = (PersonService) applicationContext
		// .getBean("personService");// 得到的是Object,需进行转换

		BeanManageTest beanManageTest = new BeanManageTest("beans.xml");
		PersonService personService = (PersonService) beanManageTest
				.getBean("personService");// 得到的是Object,需进行转换

		personService.save();
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请注明出处:http://blog.csdn.net/lindonglian

时间: 2024-10-26 13:46:09

Spring(二)Spring对JavaBean的管理的相关文章

Spring 使用注解方式进行事务管理

使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation

【Spring】的【Bean】管理(注解)【四个相同功能的注解】

[Spring]的[Bean]管理(注解)[四个相同功能的注解] 注解:代码里面特殊的标记,使用注解也可以完成一些相关的功能. 注解写法:@注解名称(属性名称=属性值) 注解使用在类.方法.属性上面 (注解可以替代配置文件,并非完全替代): 1.创建类,创建方法 1 public class User { 2 public void add(){ 3 System.out.println("add-----------"); 4 } 5 } 2.创建spring配置文件,引入约束 1

【转】Spring 使用注解方式进行事务管理

Spring 使用注解方式进行事务管理 原文链接 http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html#top 使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i

[Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习. 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. Spring为了简化自身的AOP的开发,将AspectJ拿过来作为Spring自身一个AOP的开发.

跟着刚哥学习Spring框架--Spring容器(二)

Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用.  Bean是Spring管理的基本单位,任何的Java对象和组件都被当成Bean处理,容器还负责管理Bean与Bean之间的依赖关系.  两种类型的启动实现   1.BeanFactory:IOC容器的基本实现,是Spring框架的基础设施,面向Spring本身: -- Spring容器最基本的接口就是BeanF

[Spring框架]Spring 事务管理基础入门总结.

前言:在之前的博客中已经说过了数据库的事务, 不过那里面更多的是说明事务的一些锁机制, 今天来说一下Spring管理事务的一些基础知识. 之前的文章: [数据库事务与锁]详解一: 彻底理解数据库事务一, 什么是事务 事务是逻辑上一组操作,这组操作要么全都成功,要么全都失败. 事务的属性: ACID原子性(Atomicity): 事务作为一个整体被执行,包含在其中的对数据的操作要么全部被执行,要么都不执行.一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态.

Spring3.x教程(二) Spring AOP

一.Spring AOP介绍 开发其实就是在不断的重构,抽象重复代码,然后进行封装.从最原始的模块化编程到面向对象编程,代码的封装越来越整齐清晰,但是依然存在重复的代码,而这些重复代码几乎都是与业务逻辑无关的系统逻辑代码.比如在数据操作类中的插入.更新.删除数据等方法中都存在数据库事务的处理,重要业务逻辑方法中都有日志记录的逻辑等等.每个应用系统都存在着这种系统级的重复逻辑代码,而我们并没有更好的方法去将这些代码抽象出来并进行管理.然而AOP的出现弥补了这一缺陷,AOP可以在不改变原有业务逻辑代

spring boot配置mybatis和事务管理

spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spring Boot 启动父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>

Spring SingletonBeanRegistry 单例 Bean 注册管理

Spring SingletonBeanRegistry 单例 Bean 注册管理 在 Spring 中 Bean 有单例和多例之分,只有单例的 bean 才会被 BeanFactory 管理,这个工作就是由 SingletonBeanRegistry 完成的. public interface SingletonBeanRegistry { void registerSingleton(String beanName, Object singletonObject); Object getSi