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-11-01 18:54:53

Spring4.0MVC学习资料,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

JavaScript中借用方法详解

通过call().apply()和bind()方法,我们可轻易地借用其它对象的方法,而无须从这些对象中继承它. 在JavaScript中借用方法 在JavaScript中,有时可以重用其它对象的函数或方法,而不一定非得是对象本身或原型上定义的.通过 call().apply() 和 bind() 方法,我们可轻易地借用其它对象的方法,而无须继承这些对象.这是专业 JavaScript 开发者常用的手段. 前提 本文假设你已经掌握使用 call().apply() 和 bind() 的相关知识和它

Spring4.0MVC学习资料,注解自动扫描bean,自动注入bean(二)

Spring4.0的新特性我们在上一章已经介绍过了.包括它对jdk8的支持,Groovy Bean Definition DSL的支持,核心容器功能的改进,Web开发改进,测试框架改进等等.这张我们主要介绍spring4.0的自动扫描功能,以及对bean的过滤等特性进行学习. 好吧,废话少说,我们来看看代码吧. package com.herman.ss.test; import org.springframework.context.ApplicationContext; import org

php中__autoload()方法详解

但是__autoload()方法出来了,以后就不必为此大伤脑筋了,这个类会在你实例化对象之前自动加载制定的文件. 下边我们通过一个例子来看一下,具体的使用方法,并在稍后说明使用PHP魔术函数__autoload应该注意些什么.  代码如下 复制代码  //定义一个类ClassA,文件名为ClassA.php class ClassA{  public  function __construct(){   echo "ClassA load success!";  } }  //定义一个

jquery中$.ajax()方法详解

1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持. 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设置. 4.async: 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求.如果需要发送同步请求

Android学习之本地广播使用方法详解

本地广播信息只能在应用程序内部传递,同时广播接收器也只能接收应用程序内部的广播消息. MainActivity代码 package com.example.luobo.mybroadcastreceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; imp

Lua中break语句的使用方法详解

  这篇文章主要介绍了Lua中break语句的使用方法详解,是Lua入门学习中的基础知识,需要的朋友可以参考下 当循环中遇到break语句,循环立即终止,程序控制继续下一个循环语句后面. 如果您正在使用嵌套循环(即一个循环里面另一个循环),break 语句将停止最内层循环的执行并开始执行的下一行代码的程序后段. 语法 Lua break语句语法如下: 代码如下: break 例子: 代码如下: --[ local variable definition --] a = 10--[ while l

java中set接口使用方法详解_java

java中的set接口有如下的特点: 不允许出现重复元素: 集合中的元素位置无顺序: 有且只有一个值为null的元素. 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特性为: 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的.集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序.但就集合本身的特性而言,元素之间没有必然的序.空集的性质:空集是一切集合的子集    

ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开Movie控制器,找到Details方法. // // GET: /Movies/Details/5 public ActionResult Details(Int32 id) { Movie movie = db.Movies.Find(id); if (movie == null) { retur