1. 程式人生 > >SpringBoot線上程中獲取容器中的Bean

SpringBoot線上程中獲取容器中的Bean

在 Servlet API 中有一個 ServletContextListener 介面,它能夠監聽 ServletContext
物件的生命週期,實際上就是監聽 Web 應用的生命週期。
當Servlet 容器啟動或終止Web 應用時,會觸發ServletContextEvent 事件,該事件由
ServletContextListener 來處理。在 ServletContextListener
介面中定義了處理ServletContextEvent 事件的兩個方法。
contextInitialized(ServletContextEvent sce) :當Servlet 容器啟動Web
應用時呼叫該方法。在呼叫完該方法之後,容器再對Filter 初始化,並且對那些在Web 應用啟動時就需要被初始化的Servlet
進行初始化。 contextDestroyed(ServletContextEvent sce) :當Servlet 容器終止Web
應用時呼叫該方法。在呼叫該方法之前,容器會先銷燬所有的Servlet 和Filter 過濾器。

新建SpringBean獲取bean的幫助類

package com.rs.util.bean;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class SpringBean
implements ServletContextListener {
private static WebApplicationContext springContext = null; @Override public void contextInitialized(ServletContextEvent sce) { if (springContext == null) { springContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); } } @Override
public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } public static Object getBean(String name) { return springContext.getBean(name); } public static <T> T getBean(Class<T> clazz) { return springContext.getBean(clazz); } }

啟動類中引用

package com.rs.domain;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.rs.util.bean.SpringBean;

@Configuration
@ComponentScan("com.rs")
@EnableAutoConfiguration
public class SysConfiguration {

    public static void main(String[] args) {
        SpringApplication.run(SysConfiguration.class, args);

    }


    /**
     * 
     * @return
     */
    @Bean
    public SpringBean getSpringContext() {

        return new SpringBean();
    }

}

在具體執行緒中獲取容器中的bean

package com.sino.task;

import com.sino.commons.context.SpringContext;

public class KafkaConsumerTask implements Runnable{



    private CaseService caseService = SpringContext.getBean(CaseService.class);




    @Override
    public void run() {



    }

}

相關推薦

SpringBoot線上獲取容器Bean

在 Servlet API 中有一個 ServletContextListener 介面,它能夠監聽 ServletContext 物件的生命週期,實際上就是監聽 Web 應用的生命週期。

一個類,有新增元素(add)和獲取元素數量(size)方法。 啟動兩個線。線1向容器新增數據。線2監聽容器元素數量,當容器元素數量為5時,線2輸出信息並終止

override tac trace add syn countdown print import 數據 方式一: /** * 兩個線程要是可見的所以要加上votalile */public class Test_01 { public static void

spring容器啟動之我見(四、獲取容器獲取容器bean)

1.我們經常會發現在我們的service中有註解而在dao上沒有註解 看圖 因為我們在spring容器初始化bean的時候,是把service當做一個bean ,而dao並不是一個bean,這是個人理解,如果有錯誤,歡迎大家指出。 2. 那我們總結一下那些算是spri

spring手動獲取容器bean

只需要定義一個bean,這個bean繼承ApplicationContextAware如下:public class SpringContextHolder implements ApplicationContextAware { private static A

三、獲取Spring容器獲取容器Bean物件

  Spring中的容器物件介面是ApplicationContext,其作用就是載入配置檔案,並初始化所有的Bean物件(容器啟動時)。其實現類主要有2個,分別為: ClassPathXmlApplicationContext:載入類路徑下的Spring

關於springboot請求攔截器獲取不到bean的解決方式【轉載部分修改】

介紹: 在企業開發中無論是大的專案還是小的專案,所以的web介面都可能會遇到需要進行許可權驗證/登陸驗證/授權認證的攔截。我常用的做法就是將登陸資訊/許可權資訊存入redis,前端返回token,每次請求時進行驗籤;在進行驗籤時需要通過redis元件進行操作redis快取,

Spring源碼分析(十三)緩存獲取單例bean

ould for 目的 存儲 不同 單例 color 正在 span 摘要:本文結合《Spring源碼深度解析》來分析Spring 5.0.6版本的源代碼。若有描述錯誤之處,歡迎指正。 介紹過FactoryBean的用法後,我們就可以了解bean加載的過程了。前面已

spring深入學習(十五) IOC 之從單例快取獲取單例 bean

從這篇部落格開始我們開始載入 bean 的第一個步驟,從快取中獲取 bean,程式碼片段如下: Object sharedInstance = getSingleton(beanName); if (sharedInstance != null &&

緩存獲取單例bean

trigge rac ets 頻率 性能 result cau str 一個 前言 上一篇文章FactoryBean的使用實際上是為了Bean的加載的詳細解析進行的介紹FactoryBean,從這篇文章開始,LZ會對Bean的加載過程進行詳細的講述,之前文章Bean的加載只

SpringBoot 專案如何在tomcat容器執行

一. SpringBoot內嵌容器的部署方式 SpringBoot內部預設提供內嵌的tomcat容器,所以可以直接打成jar包,丟到伺服器上的任何一個目錄,然後在當前目錄下執行java -jar demo.jar即可執行,但是這種方式的執行退出程序就結束了。如

在過濾器filter獲取spring管理bean的物件例項

有時我們需要在過濾器中獲取自動注入的物件的例項,如果在filter中也通過自動注入的方式往往得到的結果是null,如果通過new一個物件的話,有時可能是我們想要的結果,有時我們只是想獲取spring上下文中唯一的一個例項,spring預設是單例項模式,這樣的話通過自動注入和n

在彈框獲取foreach遍歷的id值,並傳遞給地址欄(方法2)

ges 應該 我們 png 地址欄 each 獲取 賦值 有時 1.php有時候我們需要再彈框中獲取foreach中遍歷的數據(例如id),在彈框中點擊按鈕並傳遞給地址欄跳轉。那麽應該怎麽做呢。第二種方法。 2. 可以在彈框中給出一個input hidden 點擊按鈕彈窗時

一般處理 程序獲取Session的值?

session對象 一般處理程序如果沒有引入using System.Web.SessionState;空間和IRequiresSessionState(或者IReadOnlySessionState)接口,那麽會出現session對象未將實例化的錯誤。一般處理 程序中獲取Session中的值?

Unity獲取Animator動畫片段的時長

sta bre 分享圖片 個數 watermark str size .get 開發 開發環境:Unity5.6.2 private Animator animator; public void GetLengthByName(string name) { floa

js獲取input所輸入的值

-c scrip tle utf-8 element 輸入 pla ont button <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

graphql 在sub query 子查詢獲取header的token

以下內容基於graphql-yoga,它是基於apollo graphql server,並整合了 graphql-subscriptions/subscriptions-transport-ws: GraphQL subscriptions server graphql.js/gr

Java獲取資料庫的資料,獲取下拉列表的資料, 獲取省、市、區的資料,根據上一層去控制下一層

$(function() { //validateRule(); getDept(); $("select[name='deptNamee']").change(function() { var deptCode = $("select[name='deptN

如何在JSP獲取html多個複選框的內容

html中複選框的程式碼 愛好: 看書 <input type="checkbox" name="userHobby" id="checkbox" value="Read"/> <label for="checkbox"></label> 打球

js獲取url引數的方法

JS中獲取url中引數的方法(帶中文的也可以): function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); var r =

javascript獲取url的引數

function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search