Spring3.0 入门进阶(1):从配置文件装载Bean

原创 2013年12月02日 21:49:37

Spring 已经盛行多年,目前已经处于3.0阶段,关于Spring的概念介绍性的东西网上已经很多,本系列博客主要是把一些知识点通过代码的方式总结起来,以便查阅.

作为入门,本篇主要介绍Bean的加载

工具类

package com.eric.introduce;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.eric.introduce.di.ConferenceRoom;
import com.eric.introduce.di.DummyConfig;
import com.eric.introduce.di.Knight;
import com.eric.introduce.di.Performer;
import com.eric.introduce.di.RescueDamselQuest;

/**
 * @author Eric
 * 
 */
public class IntroduceUtil {

	private static final String CONFIG_FILE = "com/eric/introduce/introduce.xml";
	private static ApplicationContext context = new ClassPathXmlApplicationContext(
			CONFIG_FILE);

	/**
	 * 通过ClassPathXmlApplication获得Bean实例
	 */
	public static void demonstrateDIByClassContent() {

		Knight knight = (Knight) context.getBean("knight");
		knight.embarkOnQuest();
	}

	/**
	 * 默认情况下Context总是返回同一个对象
	 */
	public static void demonstrateSingleStonClassContent() {
		Knight knight1 = (Knight) context.getBean("knight");
		Knight knight2 = (Knight) context.getBean("knight");
		System.out.println(knight1);
		System.out.println(knight2);

	}

	/**
	 * Spring中的singleSton只是正对一个context而言,不同的上下文会有不同的实例
	 */
	public static void demonstrateSingleStonInContent() {
		ApplicationContext anotherContext = new ClassPathXmlApplicationContext(
				CONFIG_FILE);
		Knight knight1 = (Knight) context.getBean("knight");
		Knight knight2 = (Knight) anotherContext.getBean("knight");
		System.out.println(knight1);
		System.out.println(knight2);

	}

	/**
	 * 通过factoryMethod 加载Bean
	 * 
	 **/
	public static void demonstrateLoadBeanByFactory() {
		DummyConfig dummyConfig = (DummyConfig) context.getBean("config");
		System.out.println(dummyConfig.getConfigurationMap());
	}

	/**
	 * 如果通过factoryMethod的方式加载Bean,即使是不同的Context,任然返回的是同一个Bean实例
	 * 
	 **/
	public static void demonstrateLoadBeanByFactory2() {
		ApplicationContext anotherContext = new ClassPathXmlApplicationContext(
				CONFIG_FILE);
		DummyConfig dummyConfig = (DummyConfig) context.getBean("config");
		DummyConfig dummyConfig2 = (DummyConfig) anotherContext
				.getBean("config");
		System.out.println(dummyConfig);
		System.out.println(dummyConfig2);
	}

	/**
	 * 但Bean定义了Scope设置为Prototype后,每次会实例化不同的实例
	 */
	public static void demonstratePrototypeBean() {
		RescueDamselQuest quest1 = (RescueDamselQuest) context
				.getBean("prototypeQuest");
		RescueDamselQuest quest2 = (RescueDamselQuest) context
				.getBean("prototypeQuest");
		System.out.println(quest1);
		System.out.println(quest2);

	}

	/**
	 * 验证init以及destory方法
	 * 
	 **/
	public static void demonstrateInitAndDestory() {
		ConferenceRoom conferenceRoom = (ConferenceRoom) context
				.getBean("conferenceRoom");
		conferenceRoom.use();
	}

	/**
	 * 验证了注入集合的几种方法
	 */
	public static void demostrateInjectionPropertieWays() {
		Performer performer = (Performer) context
				.getBean("instrumentPerformer");
		performer.performer();
		performer.eatFruit();
		performer.printProperties();
	}

}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

	<bean id="knight" class="com.eric.introduce.di.BraveKnight">
		<constructor-arg ref="quest"></constructor-arg>
	</bean>
	<bean id="quest" class="com.eric.introduce.di.RescueDamselQuest" />
	<bean id="minstrel" class="com.eric.introduce.aop.Minstrel" />
	<bean id="config" class="com.eric.introduce.di.DummyConfig"
		factory-method="getInstance" />

	<bean id="prototypeQuest" class="com.eric.introduce.di.RescueDamselQuest"
		scope="prototype" />

	<bean id="conferenceRoom" class="com.eric.introduce.di.ConferenceRoom"
		init-method="beforeUse" destroy-method="afterUse" lazy-init="true" />

	<bean id="guitar" class="com.eric.introduce.di.Guitar" />
	<bean id="apple" class="com.eric.introduce.di.Apple" />
	<bean id="orange" class="com.eric.introduce.di.Orange" />

	<bean id="instrumentPerformer" class="com.eric.introduce.di.InstrumentPerformer">
		<property name="name" value="Eric" />
		<property name="age" value="26" />
		<property name="instrument" ref="guitar" />
		<property name="privateInstrument">
			<bean class="com.eric.introduce.di.Piano"></bean>
		</property>
		<property name="favFruit">
			<list>
				<ref bean="apple" />
				<ref bean="orange" />
			</list>
		</property>
		<property name="properties">
			<props>
				<prop key="SPORT">FOOTBALL</prop>
				<prop key="CITY">WUHAN</prop>
			</props>
		</property>
	</bean>
	<aop:config>
		<aop:aspect ref="minstrel">
			<aop:pointcut id="embark" expression="execution(* *.embarkOnQuest(..))" />
			<aop:before pointcut-ref="embark" method="singleBeforeQuest"></aop:before>
			<aop:after pointcut-ref="embark" method="singleAfterQuest" />
		</aop:aspect>
	</aop:config>
</beans>

由于功能都比较简单,通过调用方法以及配置文件应该就可以看出用法,所以只列出了部分文件.

如果需要完整事例,请下载附件

相关文章推荐

【SSH进阶之路】一步步重构容器实现Spring框架——配置文件+反射实现IoC容器(十)

上上篇博文【SSH进阶之路】一步步重构容器实现Spring框架——从一个简单的容器开始(八),我们为了去掉接 口对具体实现的依赖关系,封装了一个特别简陋的容器。        上篇博文【SSH进阶之路...

J2EE进阶(四)Spring配置文件详解

J2EE进阶(四)Spring配置文件详解     Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活...

Spring进阶之路(11)-使用Aspectj切面配置和XML配置文件方式实现切面编程

异常 在使用的时候,遇到了部分的异常,我用的是最新的Spring版本,Spring-4.2.5版本的,首先确保你的配置文件中引入了下面红色部分。 ...

Spring进阶之路(8)-java代码与配置文件中配置

实际开发中并不会需要你将代码转为配置文件的形式去呈现,但是,我写着一系列博文的目的并不是教你如何去项目中进行开发,因为包括之前的几篇博文中你会发现并不是在讲项目的实践的,我的想法是这样的:为一些对Sp...

Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式

Spring获取ApplicationContext方式 我自己常用的方法: 读取一个文件1 //创建Spring容器 2 ApplicationCon...

搭建SSH框架遇到的struts.xml找不到spring定义的bean的错误(配置文件的路径问题)

最近想写一个jsp的课程作业,打算用了jsp就打算使用一下著名的ssh框架,最近几天一直都在使用原生eclipse搭建ssh,还真的遇到了很多问题,最后不断的改包,修正,我最终的ssh框架是Strut...
  • nijiayy
  • nijiayy
  • 2016年03月21日 15:17
  • 2080

Spring配置入门案例(配置文件方式)

1. IOC(控制反转)什么是IOC ioc控制反转,把对象的创建交给spring管理 ioc操作两部分 (1)ioc的配置文件方式 (2)ioc的注解方法 ioc底层原理 ioc底层原理使用技术...

spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍

Bean的基本属性   id属性: Bean的唯一标识名。它必须是合法的XML ID,在配置文件中,不能有重复id的Bean,因为容器在获取Bean的实例时都用它来做唯一索引。 name属性: 用...

Spring-配置文件Bean定义中parent属性详解

一个bean定义可能会包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法等等)以及构造函数参数和属性的值。一个child bean定义是一个能够从parent bean定义继承配置数...
  • Truong
  • Truong
  • 2014年05月31日 20:42
  • 2292

spring中读取xml配置文件、获取bean的几种方式

获取Spring框架管理的类实例的方法有多种,如下: 方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new File...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring3.0 入门进阶(1):从配置文件装载Bean
举报原因:
原因补充:

(最多只允许输入30个字)