做为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   进行反馈,共同学习!

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

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

    Spring4.0的新特性我们在上一章已经介绍过了. 包含它对jdk8的支持,Groovy Bean Definition DSL的支持.核心容器功能的改进,Web开发改进.測试框架改进等等.这张我们 ...

  2. jquery中end()方法的解释

    来源:http://www.jquery001.com/jquery-end-method.html 对于end()方法,jQuery文档是这样解释的:jQuery回到最近的一个"破坏性&q ...

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

    假设使用ApplicationContext来生成.管理Bean, 一个Bean从建立到销毁,会历经几个运行阶段. 我个人理解一般的bean的生命周期主要包含:建立,初始化,使用阶段,销毁四个核心阶段 ...

  4. Spring4.0学习笔记(6) —— 通过工厂方法配置Bean

    1.静态工厂方法: bean package com.spring.factory; public class Car { public Car(String brand) { this.brand ...

  5. jquery中ajax方法返回的三种数据类型:text、json、xml;

    1.当dataType:"text"时,处理页面用的是DBDA类中的Strquery()方法,所以返回的数据是下面这样的,所以要对返回来的数据用split根据“|”和“^”来分割, ...

  6. Asp.net mvc 中Action 方法的执行(三)

    [toc] 前面介绍了 Action 方法执行过程中的一些主要的组件以及方法执行过程中需要的参数的源数据的提供以及参数的绑定,那些都可以看作是 Action 方法执行前的一些必要的准备工作,接下来便将 ...

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

    在某些情况下,我们需要定义自己的异常并且抛出 先定义一个错误: class MyError(BaseException): def __init__(self): pass 上面定义了一个叫MyErr ...

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

    首先我们需要知道类的三个用户分别是:类的实现者,类的普通用户和类的继承者(派生类),接下来分别讲解这几种用户的区别. 1 .类的实现者:顾明思议,就是类的设计者,拥有最大的权限,可以访问类中任何权限的 ...

  9. IOS开发UIImage中stretchableImageWithLeftCapWidth方法的解释

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCap ...

随机推荐

  1. Net 通常用于dll 第三方插件

    log4net.dll ----记录日志 本人用能够 pangu.dll ----分词工具 用于高级搜索  拆分字词 能够非常好用 fastreport --------高速制作报表工具 本人仅仅做过 ...

  2. Java-WebSocket 项目的研究(三) WebSocketClient 类 具体解释

    通过之前两篇文章 Java-WebSocket 项目的研究(一) Java-WebSocket类图描写叙述 Java-WebSocket 项目的研究(二) 小试身手:client连接server并发送 ...

  3. 浅谈 PHP 神盾的解密过程

    原文:浅谈 PHP 神盾的解密过程 前些日子一个朋友丢了个shell给我,让我帮忙解密,打开源码看了下写着是 “神盾加密” , 牛逼闪闪的样子.百度下发现神盾是个很古老的东西,最后一次更新是在 201 ...

  4. 胡na娜、少年和恩师-写在甲午冬的仅仅言片语及感想

    [写在全新为移动互联网而生的Zoomla!逐浪CMS2 x2.1公布前] 恩师, 他来到这个乡村中学,带着自己的书.吉它和理想, 用自己最好的三年青春浇灌了这一代人, 在我辍学时,给我鼓舞,帮助我继续 ...

  5. Linux 核心阅读工具vim+ctags+cscope+taglist

    今天.介绍vim+ctags+cscope+taglist的内核阅读配置. 当使用过之后,我相信大部分人都会舍弃之前的Eclipse(我就是活生生的一个样例).我们先来看看实现的界面是怎么样的: 我们 ...

  6. java,spring,tomcat,跨域设置

    通过工具远程访问rest会出现  已阻止跨源请求:同源策略禁止读取位于 http://XXXXX:1200/gyly/busData 的远程资源.(原因:CORS 请求失败).  修改方法 添加Fil ...

  7. cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中(转)

    基本概念:cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中. 以博客园为例,我们看看cookie有哪些属性: 1.Name:cookie的名称: 2.V ...

  8. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...

  9. 关于split与StringTokenizer的理解

    关于split与StringTokenizer的理解 一.split    依据匹配给定的正則表達式来拆分此字符串.此方法返回的数组包括此字符串的子字符串,每一个子字符串都由还有一个匹配给定表达式的子 ...

  10. embedded dylibs/frameworks are only supported on iOS 8.0 and later 错误解决

    ld: warning: embedded dylibs/frameworks only run on iOS 8 or later ld: embedded dylibs/frameworks ar ...