最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析Java的Spring框架的BeanPostProcessor發(fā)布處理器

 更新時(shí)間:2015年12月05日 16:51:48   投稿:goldensun  
這篇文章主要介紹了Java的Spring框架的BeanPostProcessor發(fā)布處理器,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下

BeanPostProcessor 的接口定義,可以實(shí)現(xiàn)提供自己的實(shí)例化邏輯,依賴解析邏輯等,也可以以后在Spring容器實(shí)例化完畢,配置和初始化一個(gè)bean通過插入一個(gè)或多個(gè)的BeanPostProcessor實(shí)現(xiàn)一些自定義邏輯回調(diào)方法實(shí)現(xiàn)。

可以配置多個(gè)的BeanPostProcessor接口,控制這些的BeanPostProcessor接口,通過設(shè)置屬性順序執(zhí)行順序提供的BeanPostProcessor實(shí)現(xiàn)了Ordered接口。

BeanPostProcessor可以對bean(或?qū)ο螅┎僮鲗?shí)例,這意味著Spring IoC容器實(shí)例化一個(gè)bean實(shí)例,然后BeanPostProcessor的接口做好自己的工作。

ApplicationContext會(huì)自動(dòng)檢測已定義實(shí)現(xiàn)的BeanPostProcessor接口和注冊這些bean類為后置處理器,可然后通過在容器創(chuàng)建bean,在適當(dāng)時(shí)候調(diào)用任何bean。

示例:
下面的示例顯示如何編寫,注冊和使用BeanPostProcessor 可以在一個(gè)ApplicationContext 的上下文。

使用Eclipse IDE,然后按照下面的步驟來創(chuàng)建一個(gè)Spring應(yīng)用程序:

2015125164042739.png (575×319)

這里是 HelloWorld.java 文件的內(nèi)容:

package com.yiibai;

public class HelloWorld {
  private String message;

  public void setMessage(String message){
   this.message = message;
  }

  public void getMessage(){
   System.out.println("Your Message : " + message);
  }

  public void init(){
   System.out.println("Bean is going through init.");
  }

  public void destroy(){
   System.out.println("Bean will destroy now.");
  }
}

這是實(shí)現(xiàn)BeanPostProcessor,之前和之后的任何bean的初始化它打印一個(gè)bean的名字非常簡單的例子??梢砸?yàn)橛袃蓚€(gè)后處理器的方法對內(nèi)部bean對象訪問之前和實(shí)例化一個(gè)bean后執(zhí)行更復(fù)雜的邏輯。

這里是InitHelloWorld.java文件的內(nèi)容:

package com.yiibai;

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.BeansException;

public class InitHelloWorld implements BeanPostProcessor {
 
  public Object postProcessBeforeInitialization(Object bean,
         String beanName) throws BeansException {
   System.out.println("BeforeInitialization : " + beanName);
   return bean; // you can return any other object as well
  }

  public Object postProcessAfterInitialization(Object bean,
         String beanName) throws BeansException {
   System.out.println("AfterInitialization : " + beanName);
   return bean; // you can return any other object as well
  }

}

以下是MainApp.java 文件的內(nèi)容。在這里,需要注冊一個(gè)關(guān)閉掛鉤registerShutdownHook() 是在AbstractApplicationContext類中聲明的方法。這將確保正常關(guān)閉,并調(diào)用相關(guān)的destroy方法。

package com.yiibai;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
  public static void main(String[] args) {

   AbstractApplicationContext context = 
             new ClassPathXmlApplicationContext("Beans.xml");

   HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
   obj.getMessage();
   context.registerShutdownHook();
  }
}

下面是init和destroy方法需要的配置文件beans.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"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

  <bean id="helloWorld" class="com.yiibai.HelloWorld"
    init-method="init" destroy-method="destroy">
    <property name="message" value="Hello World!"/>
  </bean>

  <bean class="com.yiibai.InitHelloWorld" />

</beans>

創(chuàng)建源代碼和bean配置文件完成后,讓我們運(yùn)行應(yīng)用程序。如果一切順利,這將打印以下信息:

BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.

相關(guān)文章

  • Eclipse中查看android工程代碼出現(xiàn)

    Eclipse中查看android工程代碼出現(xiàn)"android.jar has no source attachment

    這篇文章主要介紹了Eclipse中查看android工程代碼出現(xiàn)"android.jar has no source attachment"的解決方案,需要的朋友可以參考下
    2016-05-05
  • Java NIO三大組件與ByteBuffer深入理解及使用

    Java NIO三大組件與ByteBuffer深入理解及使用

    這篇文章主要介紹了Java NIO三大組件與ByteBuffer,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之LinkedList的用法詳解

    Java數(shù)據(jù)結(jié)構(gòu)之LinkedList的用法詳解

    鏈表(Linked?list)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表。Java的LinkedList(鏈表)?類似于?ArrayList,是一種常用的數(shù)據(jù)容器,本文就來簡單講講它的使用吧
    2023-05-05
  • 在SpringBoot中,如何使用Netty實(shí)現(xiàn)遠(yuǎn)程調(diào)用方法總結(jié)

    在SpringBoot中,如何使用Netty實(shí)現(xiàn)遠(yuǎn)程調(diào)用方法總結(jié)

    我們在進(jìn)行網(wǎng)絡(luò)連接的時(shí)候,建立套接字連接是一個(gè)非常消耗性能的事情,特別是在分布式的情況下,用線程池去保持多個(gè)客戶端連接,是一種非常消耗線程的行為.那么我們該通過什么技術(shù)去解決上述的問題呢,那么就不得不提一個(gè)網(wǎng)絡(luò)連接的利器——Netty,需要的朋友可以參考下
    2021-06-06
  • MongoDB整合Spring實(shí)例詳細(xì)講解(含代碼)

    MongoDB整合Spring實(shí)例詳細(xì)講解(含代碼)

    這篇文章主要介紹了MongoDB整合Spring實(shí)例詳細(xì)講解(含代碼),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java設(shè)計(jì)模式之狀態(tài)模式詳解

    Java設(shè)計(jì)模式之狀態(tài)模式詳解

    Java?中的狀態(tài)模式(State?Pattern)是一種行為型設(shè)計(jì)模式,它允許對象在內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為,本文將詳細(xì)介紹?Java?中的狀態(tài)模式,我們將從狀態(tài)模式的概述、結(jié)構(gòu)與實(shí)現(xiàn)、優(yōu)缺點(diǎn)、適用場景等方面進(jìn)行講解,需要的朋友可以參考下
    2023-05-05
  • Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解

    Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java中if語句return用法和有無括號的區(qū)別

    Java中if語句return用法和有無括號的區(qū)別

    本文主要介紹了Java中if語句return用法和有無括號的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • Mybatis查詢時(shí)數(shù)據(jù)丟失的問題及解決

    Mybatis查詢時(shí)數(shù)據(jù)丟失的問題及解決

    Mybatis查詢時(shí)數(shù)據(jù)丟失的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JAVA實(shí)現(xiàn)基于皮爾遜相關(guān)系數(shù)的相似度詳解

    JAVA實(shí)現(xiàn)基于皮爾遜相關(guān)系數(shù)的相似度詳解

    這篇文章主要介紹了JAVA實(shí)現(xiàn)基于皮爾遜相關(guān)系數(shù)的相似度詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評論

丹棱县| 佳木斯市| 怀远县| 佛山市| 慈利县| 奉节县| 上思县| 柳河县| 伽师县| 柳州市| 天水市| 军事| 石景山区| 南昌市| 梓潼县| 隆德县| 体育| 昌黎县| 达尔| 丹阳市| 唐山市| 泰来县| 阿拉善左旗| 古田县| 宝应县| 临夏市| 平昌县| 固镇县| 红原县| 中西区| 通江县| 榆树市| 咸丰县| 嘉峪关市| 阜新市| 德昌县| 巍山| 东港市| 南丹县| 剑河县| 阿克苏市|