Spring常用接口
- Ordered
有兩個常量int HIGHEST_PRECEDENCE = Integer.MIN_VALUE; int LOWEST_PRECEDENCE = Integer.MAX_VALUE;
,數值越大優先級越低,數值相同時優先級隨機。一個方法int getOrder();
。 - InitializingBean
只有一個afterPropertiesSet方法,在Bean的屬性都設置值後被調用,用於完成一些初始化工作。能夠實現相同功能的其他兩種方式:@PostContsuct註解,Spring的配置文件init-method
。三種方式的執行順序優先級:註解 > InitializingBean接口實現類 >init-method
。相應的方法中不要編寫一些複雜且執行時間很長的邏輯。 - DisposableBean
只有一個destroy方法,在Bean被銷燬、生命週期結束之前被調用,用於做一些銷燬的收尾工作。能夠實現相同功能的其他兩種方式:@PreDestory註解,Spring的配置文件destroy-method
屬性。三種方式的執行順序優先級:註解 > DisposableBean接口實現類 >destroy-method
。 - Aware
一個最頂層的標記接口,即沒有任何方法,通過上下文Context可以獲得當前環境。 - ApplicationContextAware
只有一個setApplicationContext方法,在該Bean被加載的過程中獲取Spring的應用上下文ApplicationContext實例,進而可以獲取Spring容器內的很多信息。 - FactoryBean
通過實現getObject方法,加載想要的Bean,完成bean實例化的個性定製。
在Spring源碼中,其實現類如ProxyFactoryBean,用於創建bean的AOP代理,JndiObjectFactoryBean,用於從JNDI中查找對象。 - BeanPostProcessor
有兩個方法: postProcessBeforeInitialization和postProcessAfterInitialization。在每個Bean初始化,即調用setter之前和之後的後處理,用於實現初始化的邏輯控制。 - BeanFactoryPostProcessor
只有postProcessBeanFactory方法,在Bean被創建之前,獲取容器中Bean的定義信息,並且可以進行修改。實現類中的postProcessBeanFactory方法只會被執行一次,且先於BeanPostProcessor接口的方法。 - BeanFactoryAware
只有一個setBeanFactory方法,用於獲取在該Bean被加載的過程中加載該Bean的BeanFactory,同時也可以獲取這個BeanFactory中加載的其它Bean。 - InstantiationAwareBeanPostProcessor
常用的方法是postProcessBeforeInstantiation和postProcessAfterInstantiation。每個Bean的實例化(即調用構造函數)之前和之後,會分別調用該實現接口類中的這兩個方法。 - ApplicationListener
只有一個onApplicationEvent方法,用於需要監聽自定義事件時。要發佈自定義事件,調用ApplicationContext的publishEvent方法。 - BeanNameAware
用於需要獲取bean自身在容器中的id/name時。 - Resource
集成InputStreamSource,提供操作資源的若干方法。實現類如FileSystemResource提供對文件系統絕對路徑下的資源進行訪問;ClassPathResource提供對classpath類路徑下資源的訪問;ServletContextResource提供web應用中對Web應用根目錄下的資源的訪問。
註解
- @Autowired:自動裝配
- @Value:注入SpEL表達式,可用於字段或者方法參數上
@Value(value = "#{'Hello Spring!!!'[0]}")
private String myName;
@Value("#{@systemProperties}")
private Properties pros;
@Value("#{1==1 ? true : false}")
private Boolean b1;
@Value("#{'no'}")
private Boolean b2;
@Value("#{'on'}")
private Boolean b3;
@Value("#{ new double[]{100,44,3.1415,0.4432} }")
private Double[] nums;
- @Qualifier:限定描述符,用於按類型自動裝配時有多個同類型的bean時,規定選擇某一個特定名稱的bean
- @PostConstruct:bean初始化之前調用的方法,等同於XML配置的
init-method
- @PreDestroy:bean銷燬之前調用的方法,等同於xml配置的
destroy-method
- @Component(“myBeanA”),初始化bean的名字默認是類名第一個字母小寫。下面三個註解都是@Component的擴展註解(即源碼中引入@Component)
- @Controller,表示層
- @Service,業務邏輯層
- @Repository,數據訪問層
- @Lazy(false) 延遲初始化
- @DependsOn(“myBeanB”) 定義Bean初始化及銷燬時的順序
- @Scope(“prototype”) 修改bean的scope,默認單例singleton
- @Primary 自動裝配時當出現多個Bean候選者時,將作爲首選者
- @ManagedBean註解及自定義擴展:@ManagedBean註解,需要在應用服務器環境使用(如Jboss),自定義擴展部分是爲了配合Spring自帶的模式註解擴展自定義的,並不包含在Java EE 6規範中,在Java EE 6中相應的服務層、DAO層功能由EJB來完成。
- @Named註解及自定義擴展,可用於類型、字段、方法參數
- @ManagedBean和@Named用法可以參考博客:http://jinnianshilongnian.iteye.com/blog/1461055
常用的Bean的配置元數據:@Lazy,@DependsOn,@Scope,@Qualifier,@Primary
抽象類
- ApplicationEvent
用於創建自定義事件
Spring框架工具類
大部分位於包org.springframework.util下,類名以Utils結尾的工具類。也有位於*.util.
下面的類,如HtmlUtils。也有位於*.support.
下面的類,如 EncodedResource。其他散亂在別的包名之下。
// 支持classpath:和file:的地址前綴
ResourceUtils.getFile("classpath:conf/awesome.txt");
// 將文件內容拷貝到一個目標byte[]、String甚至一個輸出流或輸出文件中
FileCopyUtils.copy(Resource.getFile, new File(Resource.getFile(), getParent() + '目標文件名'));
// 直接通過基於類路徑的文件地址加載屬性資源
PropertiesLoaderUtils.loadAllProperties("awesome.properties");
// Resource只能用於默認操作系統的編碼格式進行加載資源。EncodedResource實現InputStreamSource,支持指定編碼格式加載,常用於解決亂碼問題
EncodedResource res = new EncodedResource(res,"UTF-8");
// 訪問Spring容器,獲取容器中的Bean
ServletContext sc = request.getSession().getServletContext();
WebApplicationContextUtils.getWebApplicationContext(sc);
// js轉義
JavaScriptUtils.javaScriptEscape(String str);
// html轉義
HtmlUtils.htmlEscape(String str);// 轉換爲HTML轉義字符表示
HtmlUtils.htmlEscapeDecimal(String str); // 轉換爲數據轉義表示
HtmlUtils.htmlEscapeHex(String str); // 轉換爲十六進制數據轉義表示
HtmlUtils.htmlUnescape(String str); // 將經過轉義內容還原