Spring4.0MVC学习资料,ApplicationContext中的方法具体解释(三)

做为java开源的一部分,spring框架一直排在老大的位置。Spring4.0 是 Spring 推出的一个重大版本号升级,进一步加强了 Spring 作为 Java 领域第一开源平台的地位。Spring4.0 引入了众多 Java 开发人员期盼的新特性,如泛型依赖注入、SpEL、校验及格式化框架、Rest风格的 WEB 编程模型等。这些新功能有用性强、易用性高,可大幅减少 JavaEE 开发的难度,同一时候有效提升应用开发的优雅性。为了方便开发,Spring的ApplicationContext类,给我们提供了非常多有用的方法,我在这里进行一下解说。

看配置代码(applicationContext2.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" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <description>
    	herman
    </description>

    <alias name="nn" alias="abc"/>

	<bean class="com.herman.ss.pojo.Person"></bean>

	<bean id="person0" class="com.herman.ss.pojo.Person" name="a,b,c,d,e"></bean>

	<bean id="person1" class="com.herman.ss.pojo.Person" name="m,n">
		<property name="age" value="20"></property>
		<property name="name" value="herman"></property>
	</bean>

	<bean id="person2" class="com.herman.ss.pojo.Person">
		<property name="age">
			<value>20</value>
		</property>
		<property name="name">
			<value>herman</value>
		</property>
	</bean>

	<bean id="person3" class="com.herman.ss.pojo.Person">
		<constructor-arg name="name" value="herman"></constructor-arg>
		<constructor-arg name="age" value="20"></constructor-arg>
	</bean>

	<bean id="person4" class="com.herman.ss.pojo.Person">
		<constructor-arg type="int" value="20"></constructor-arg>
		<constructor-arg type="java.lang.String" value="herman"></constructor-arg>
	</bean>

	<bean id="house" class="com.herman.ss.pojo.House">
		<constructor-arg>
			<null></null>
		</constructor-arg>
		<constructor-arg name="address" value="Shanghai"></constructor-arg>
		<constructor-arg name="price" value="10000000.12"></constructor-arg>
	</bean>

	<bean id="person5" class="com.herman.ss.pojo.Person">
		<constructor-arg type="int" value="20"></constructor-arg>
		<constructor-arg type="java.lang.String" value="herman"></constructor-arg>
		<constructor-arg type="com.herman.ss.pojo.House" ref="house"></constructor-arg>
	</bean>

	<bean id="person6" class="com.herman.ss.pojo.Person">
		<constructor-arg type="int" value="20" index="1"></constructor-arg>
		<constructor-arg value="herman" index="0"></constructor-arg>
		<constructor-arg type="com.herman.ss.pojo.House" ref="house"></constructor-arg>
	</bean>
</beans>

在看測试代码:

package com.herman.ss.test;

import java.util.Map;

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

import com.herman.ss.pojo.House;
import com.herman.ss.pojo.Person;

public class Test2 {

	/**
	 * @see 使用getBeansOfType获取bean对象集合
	 * @author Herman.Xiong
	 * @date 2014年8月6日15:38:10
	 */
	public static void test0(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		Map<String, Person> map=ctx.getBeansOfType(Person.class);
		for (String key : map.keySet()) {
			System.out.println("key= "+ key + " and value= " + map.get(key));
		}
	}

	/**
	 * @see 使用containsBean推断bean对象是否存在
	 * @author Herman.Xiong
	 * @date 2014年8月6日15:40:18
	 */
	public static void test1(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		System.out.println(ctx.containsBean("person0"));
	}

	/**
	 * @see 使用getBeanDefinitionCount统计定义bean对象的数量
	 * @author Herman.Xiong
	 * @date 2014年8月6日15:42:34
	 */
	public static void test2(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		System.out.println(ctx.getBeanDefinitionCount());
	}

	/**
	 * @see 使用getBeanDefinitionNames获取定义的bean的名字
	 * @author Herman.Xiong
	 * @date 2014年8月6日15:45:50
	 */
	public static void test3(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		String beanName []= ctx.getBeanDefinitionNames();
		for (int i = 0; i < beanName.length; i++) {
			System.out.println(beanName[i]);
		}
	}

	/**
	 * @see 依据bean名字获取bean的别名
	 * @author Herman.Xiong
	 * @date 2014年8月6日16:20:54
	 */
	public static void test4(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		String[] aliases=ctx.getAliases("a");
		for (int i = 0; i < aliases.length; i++) {
			System.out.println(aliases[i]);
		}
		//person0,b,e,c,d
		/**
		 * 由于bean的名字由两部分组成:
		 * (1) 默认名字。当定义了bean的id属性时,默认名字为id属性的值;
		 *  没有定义id时,取name属性的第一个值;id和name均没有定义时,取类名。
		 * (2) 别名,除默认名字以外的其它名字。
		 */
	}

	/**
	 * @see isPrototype,isSingleton推断是否为多例,单例,原型
	 * @author Herman.Xiong
	 * @date 2014年8月6日16:25:56
	 */
	public static void test5(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		System.out.println(ctx.isPrototype("person0"));
		System.out.println(ctx.isSingleton("person0"));
		System.out.println(ctx.isTypeMatch("person0", House.class));
	}

	/**
	 * @see 使用isTypeMatch方法推断bean对象是否为指定类型
	 */
	public static void test6(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		System.out.println(ctx.isTypeMatch("person0", House.class));
	}

	/**
	 * @see 其它測试
	 */
	public static void test7(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext2.xml");
		System.out.println(ctx.getApplicationName());//模型的应用的名字
		System.out.println(ctx.getDisplayName());
		System.out.println(ctx.getStartupDate());
		System.out.println(ctx.findAnnotationOnBean("person0", Component.class));//返回相应的注解实例(參数指定了Bean的配置名称和须要返回的注解的类型)
		System.out.println(ctx.getBeanNamesForAnnotation(Component.class));//返回全部使用了相应注解annotationType的Bean
		/**
		 * ConfigurableBeanFactory
			这个接口定义了设置父容器(ParentBeanFactory),设置类装载器,
			设置属性编辑器(PropertyEditorRegistrar)等一系列功能,增强了IoC容器的可定制性
			AutowireCapableBeanFactory
			定义了一些自己主动装配Bean的方法
			SingletonBeanRegistry
			这个接口没有继承BeanFactory,它主要定义了在执行期间向容器注冊单例模式Bean的方法
			BeanDefinitionRegistry
			这个接口没有继承BeanFactory,它主要定义了向容器中注冊BeanDefinition对象的方法
			在Spring配置文件里,每个<bean>节点元素在Spring容器中都是由一个BeanDefinition对象描写叙述的)
		 */
	}

	public static void main(String[] args) {
		//test0();
		//test1();
		//test2();
		//test3();
		//test4();
		//test5();
		//test6();
		test7();
	}
}

自己执行測试一把,是不是感觉非常爽。

欢迎大家关注我的个人博客!!!!

如有不懂,疑问或者欠妥的地方,请加QQ群:135430763   进行反馈,共同学习!

时间: 2024-10-29 19:08:19

Spring4.0MVC学习资料,ApplicationContext中的方法具体解释(三)的相关文章

Spring4.0MVC学习资料,ApplicationContext中的方法详解(三)

做为java开源的一部分,spring框架一直排在老大的位置.Spring4.0 是 Spring 推出的一个重大版本升级,进一步加强了 Spring 作为 Java 领域第一开源平台的地位.Spring4.0 引入了众多 Java 开发者期盼的新特性,如泛型依赖注入.SpEL.校验及格式化框架.Rest风格的 WEB 编程模型等.这些新功能实用性强.易用性高,可大幅降低 JavaEE 开发的难度,同时有效提升应用开发的优雅性.为了方便开发,Spring的ApplicationContext类,

Spring4.0MVC学习资料,Controller中的方法详解和使用(四)

在以前,mvc的框架,基本上就是struts框架了.但是现在不一样了.springmvc出来了.spring的mvc框架不亚于struts了,springmvc出来了,我们有了更多的选择. Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 We

好记性不如烂笔头86-spring3学习(7)-ApplicationContext中bean的生命周期

假设使用ApplicationContext来生成.管理Bean, 一个Bean从建立到销毁,会历经几个运行阶段. 我个人理解一般的bean的生命周期主要包含:建立,初始化,使用阶段,销毁四个核心阶段.使用ApplicationContext 和BeanFactory对bean的生命周期来看,宏观上基本同样,微观上有一些差异. 假设使用ApplicationContext来生成并管理Bean.在运行BeanfactoryAware的 setBeanFactory()阶段之后.若Bean类上有实现

python中super()方法的解释

在学习 Python 类的时候,会碰见类中有 __init__() 这样一个函数,其实它就是 Python 的构造方法. 构造方法类似于类似 init() 这种初始化方法,来初始化新创建对象的状态,在一个对象创建后会立即调用,比如像实例化一个类: f = FooBar() f.init()#手动初始化 使用构造方法就能让它简化成如下形式:对象创建后自动调用魔法方法__init__(),对对象进行初始化操作 f = FooBar() 在明白了构造方法之后,来点进阶的问题,那就是父类的构造方法中的初

Python学习-18.Python中的错误处理(三)

在某些情况下,我们需要定义自己的异常并且抛出 先定义一个错误: 1 class MyError(BaseException): 2 def __init__(self): 3 pass 上面定义了一个叫MyError的类,继承自BaseException.在Python中,所有的错误都继承自BaseException,相当于C#中的所有异常都继承自Exception.接下来定义了一个空构造函数. 那么接下来怎样抛出这个异常呢? 在Python中,使用raise关键字,相当于C#中的throw.

在学习c++过程中,总结类的三个用户以及使用权限,感觉非常实用

首先我们需要知道类的三个用户分别是:类的实现者,类的普通用户和类的继承者(派生类),接下来分别讲解这几种用户的区别. 1 .类的实现者:顾明思议,就是类的设计者,拥有最大的权限,可以访问类中任何权限的成员,主要负责编写类的成员和友元的代码.可以访问类中的公有部分(public),保护部分(protect)和(private)私有部分. 2.类的普通用户:就是使用类的对象,这部分用户只能访问类的接口(也就是公用部分poublic). 3.类的继承者:就是派生类.派生类能访问基类中的公有部分和受保护

Deep Learning 博文推荐和学习资料

1.     http://www.cnblogs.com/tornadomeet/tag/Deep%20Learning/default.html?page=1 博客园tornadomeet的博文,楼主参加了天津的DL学习,里面有很全的DL学习笔记,很值得学习. 2.     http://blog.csdn.net/zouxy09/article/details/8781396 CSDN的zhouxy09(甘苦人生)的博文,楼主对DL系列的概述很详细 3.     http://blog.c

Java 8 中的方法引用

一.原理概要 lambda 表示式,可以作为某些匿名内部类的替代.主要目的是调用该内部类中的方法,而该方法的实现(重写)由 lambda表示式决定. 通常,我们可能不关心匿名内部类中的具体方法(被重写的方法),而只关心该方法是怎么被重写的(方法的实现).因此,我们可以构造一个中间对象(通常是接口,比如 Funtion),该接口拥有一个需要该重写的方法(比如 Function 对应的方法是 apply). 二.如何使用 在实际书写时,可以只写出(传递的参数)与{方法的实现},或者只标出实现过程的

wxWidgets初学者导引(4)——wxWidgets学习资料及利用方法指导

wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 4 wxWidgets学习资料及利用方法指导 初学者常苦于找不到参考资料.实际上,是找不到,不是没有.真正有用的资料,常常也就在手边,只是不知道.有能力熟练地使用一切能用得着的资料,这是水平提高的指标之一.这种能力,同样,也是在实践中获得,而不是有谁为你讲一堂课就能得