zoukankan      html  css  js  c++  java
  • 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   进行反馈,共同学习!

  • 相关阅读:
    常用正则表达式
    玉洁哥的设计模式指摘
    jquery makearray()使用
    html/css技巧总结
    json 数组 对象 xml 之间转换(待补充)
    Html5 Geolocation获取地理位置信息
    JSON.stringify 应用
    url操作一网打尽(一)
    jquery选择器
    JavaScript Window Location
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4554406.html
Copyright © 2011-2022 走看看