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


    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>
    


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

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

  • 相关阅读:
    零点存在定理与介值定理
    moco入门
    git的基础操作-入门
    有道笔记链接地址 -----关于python
    Linux学习---linux的svn的配置与安装
    Linux学习---linux系统下安装配置Jenkins
    Linux学习-linux系统下安装jdk和tomcat,以及遇到的问题清单
    Linux学习-linux系统下python升级到python3.6步骤详解,以及遇到的问题解决
    Linux学习---Linux目录结构说明
    电脑屏幕左上角出现一个小的白块
  • 原文地址:https://www.cnblogs.com/riasky/p/3455572.html
Copyright © 2020-2023  润新知