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 進行反饋,共同學習!
相關文章
- Spring4.0MVC學習資料,Controller中的方法詳解和使用(四)SpringMVCController
- Spring4.0MVC學習資料,簡單學習教程(一)SpringMVC
- ApplicationContext中getBean詳解APPContextBean
- MYSQL學習(三) --索引詳解MySql索引
- Spring4.0MVC學習資料,註解自動掃描bean,自動注入bean(二)SpringMVCBean
- (資料科學學習手札62)詳解seaborn中的kdeplot、rugplot、distplot與jointplot資料科學
- 深度學習中的資料預處理方法深度學習
- Hive學習之三 《Hive的表的詳解和應用案例詳解》Hive
- 詳解學習C#的方法和步驟C#
- 分享學習大資料的方法大資料
- MySQL學習筆記之資料型別詳解MySql筆記資料型別
- 【海量資料學院】DBA的學習方法論系列—正確的學習方法
- Redis學習記錄三:資料型別(常用:詳細解析)Redis資料型別
- 大資料的系統學習:大資料學習的三個階段概述大資料
- 一文詳解資料科學家的必備技能(附學習資源)資料科學
- VueJS中學習使用Vuex詳解VueJS
- 學習:FCKeditor使用方法技術詳解
- Python中求絕對值的三種方法詳解!Python
- 零基礎大資料學習線路詳解大資料
- JavaScript學習總結(三)BOM和DOM詳解JavaScript
- Java中的main()方法詳解JavaAI
- Java中的方法引用詳解Java
- 資料字典的學習方法--共同進步
- 史上最全、最詳細的Docker學習資料Docker
- JAVA中 XML與資料庫互轉 學習筆記三JavaXML資料庫筆記
- 拯救深度學習:標註資料不足下的深度學習方法深度學習
- 資料庫學習(三)基本查詢資料庫
- 學習 JavaScript 資料結構(三)——集合JavaScript資料結構
- JVM詳解(三)——執行時資料區JVM
- 資料庫三大正規化詳解資料庫
- Redis資料結構詳解之Set(三)Redis資料結構
- 大資料學習方法,學大資料需要的基礎和路線大資料
- Android中的onWindowFocusChanged()方法詳解Android
- 【深度學習】深度解讀:深度學習在IoT大資料和流分析中的應用深度學習大資料
- SQL Server海量資料匯入最快方法的詳解SQLServer
- VB.NET處理資料行的方法詳解
- 詳解JavaScript中的嵌入式資料庫JavaScript資料庫
- 資料庫控制檔案中的SCN詳解資料庫