Spring系列之常用接口,抽象類,工具類

Spring常用接口

  1. Ordered
    有兩個常量int HIGHEST_PRECEDENCE = Integer.MIN_VALUE; int LOWEST_PRECEDENCE = Integer.MAX_VALUE;,數值越大優先級越低,數值相同時優先級隨機。一個方法int getOrder();
  2. InitializingBean
    只有一個afterPropertiesSet方法,在Bean的屬性都設置值後被調用,用於完成一些初始化工作。能夠實現相同功能的其他兩種方式:@PostContsuct註解,Spring的配置文件init-method。三種方式的執行順序優先級:註解 > InitializingBean接口實現類 > init-method。相應的方法中不要編寫一些複雜且執行時間很長的邏輯。
  3. DisposableBean
    只有一個destroy方法,在Bean被銷燬、生命週期結束之前被調用,用於做一些銷燬的收尾工作。能夠實現相同功能的其他兩種方式:@PreDestory註解,Spring的配置文件destroy-method屬性。三種方式的執行順序優先級:註解 > DisposableBean接口實現類 > destroy-method
  4. Aware
    一個最頂層的標記接口,即沒有任何方法,通過上下文Context可以獲得當前環境。
  5. ApplicationContextAware
    只有一個setApplicationContext方法,在該Bean被加載的過程中獲取Spring的應用上下文ApplicationContext實例,進而可以獲取Spring容器內的很多信息。
  6. FactoryBean
    通過實現getObject方法,加載想要的Bean,完成bean實例化的個性定製。
    在Spring源碼中,其實現類如ProxyFactoryBean,用於創建bean的AOP代理,JndiObjectFactoryBean,用於從JNDI中查找對象。
  7. BeanPostProcessor
    有兩個方法: postProcessBeforeInitialization和postProcessAfterInitialization。在每個Bean初始化,即調用setter之前和之後的後處理,用於實現初始化的邏輯控制。
  8. BeanFactoryPostProcessor
    只有postProcessBeanFactory方法,在Bean被創建之前,獲取容器中Bean的定義信息,並且可以進行修改。實現類中的postProcessBeanFactory方法只會被執行一次,且先於BeanPostProcessor接口的方法。
  9. BeanFactoryAware
    只有一個setBeanFactory方法,用於獲取在該Bean被加載的過程中加載該Bean的BeanFactory,同時也可以獲取這個BeanFactory中加載的其它Bean。
  10. InstantiationAwareBeanPostProcessor
    常用的方法是postProcessBeforeInstantiation和postProcessAfterInstantiation。每個Bean的實例化(即調用構造函數)之前和之後,會分別調用該實現接口類中的這兩個方法。
  11. ApplicationListener
    只有一個onApplicationEvent方法,用於需要監聽自定義事件時。要發佈自定義事件,調用ApplicationContext的publishEvent方法。
  12. BeanNameAware
    用於需要獲取bean自身在容器中的id/name時。
  13. Resource
    集成InputStreamSource,提供操作資源的若干方法。實現類如FileSystemResource提供對文件系統絕對路徑下的資源進行訪問;ClassPathResource提供對classpath類路徑下資源的訪問;ServletContextResource提供web應用中對Web應用根目錄下的資源的訪問。

註解

  1. @Autowired:自動裝配
  2. @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;
  1. @Qualifier:限定描述符,用於按類型自動裝配時有多個同類型的bean時,規定選擇某一個特定名稱的bean
  2. @PostConstruct:bean初始化之前調用的方法,等同於XML配置的init-method
  3. @PreDestroy:bean銷燬之前調用的方法,等同於xml配置的destroy-method
  4. @Component(“myBeanA”),初始化bean的名字默認是類名第一個字母小寫。下面三個註解都是@Component的擴展註解(即源碼中引入@Component)
  5. @Controller,表示層
  6. @Service,業務邏輯層
  7. @Repository,數據訪問層
  8. @Lazy(false) 延遲初始化
  9. @DependsOn(“myBeanB”) 定義Bean初始化及銷燬時的順序
  10. @Scope(“prototype”) 修改bean的scope,默認單例singleton
  11. @Primary 自動裝配時當出現多個Bean候選者時,將作爲首選者
  12. @ManagedBean註解及自定義擴展:@ManagedBean註解,需要在應用服務器環境使用(如Jboss),自定義擴展部分是爲了配合Spring自帶的模式註解擴展自定義的,並不包含在Java EE 6規範中,在Java EE 6中相應的服務層、DAO層功能由EJB來完成。
  13. @Named註解及自定義擴展,可用於類型、字段、方法參數
  14. @ManagedBean和@Named用法可以參考博客:http://jinnianshilongnian.iteye.com/blog/1461055

常用的Bean的配置元數據:@Lazy,@DependsOn,@Scope,@Qualifier,@Primary

抽象類

  1. 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); // 將經過轉義內容還原

參考

文件資源操作和 Web 相關工具類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章