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="https://www.springframework.org/schema/beans" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:context="https://www.springframework.org/schema/context" xmlns:aop="https://www.springframework.org/schema/aop" xmlns:tx="https://www.springframework.org/schema/tx" xmlns:p="https://www.springframework.org/schema/p" xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-4.0.xsd https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.0.xsd https://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop-4.0.xsd https://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <description> herman </description> <alias name="nn" alias="abc"/> <bean ></bean> <bean name="a,b,c,d,e"></bean> <bean name="m,n"> <property name="age" value="20"></property> <property name="name" value="herman"></property> </bean> <bean > <property name="age"> <value>20</value> </property> <property name="name"> <value>herman</value> </property> </bean> <bean > <constructor-arg name="name" value="herman"></constructor-arg> <constructor-arg name="age" value="20"></constructor-arg> </bean> <bean > <constructor-arg type="int" value="20"></constructor-arg> <constructor-arg type="java.lang.String" value="herman"></constructor-arg> </bean> <bean > <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 > <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 > <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 進行反饋,共同學習!
最後更新:2017-04-03 05:39:47