1. 程式人生 > >在springboot中普通的執行緒類訪問service類

在springboot中普通的執行緒類訪問service類

  1. 首先線上程類上註解@Component
  2.  @Autowired
    private IStudentService studentService;
  3. 呼叫時候studentService = SpringUtils.getBean("studentService");
  4. SpringUtils
    package com.ruoyi.common.utils.spring;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.NoSuchBeanDefinitionException;
    import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    /**
     * spring工具類 方便在非spring管理環境中獲取bean
     * 
     * @author ruoyi
     */
    @Component
    public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware
    {
        /** Spring應用上下文環境 */
        private static ConfigurableListableBeanFactory beanFactory;
        private static ApplicationContext applicationContext = null;
    
        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
        {
            SpringUtils.beanFactory = beanFactory;
        }
    
        /**
         * 獲取物件
         *
         * @param name
         * @return Object 一個以所給名字註冊的bean的例項
         * @throws org.springframework.beans.BeansException
         *
         */
        @SuppressWarnings("unchecked")
        public static <T> T getBean(String name) throws BeansException
        {
            return (T) beanFactory.getBean(name);
        }
    
        /**
         * 獲取型別為requiredType的物件
         *
         * @param clz
         * @return
         * @throws org.springframework.beans.BeansException
         *
         */
        public static <T> T getBean(Class<T> clz) throws BeansException
        {
            T result = (T) beanFactory.getBean(clz);
            return result;
        }
    
        /**
         * 如果BeanFactory包含一個與所給名稱匹配的bean定義,則返回true
         *
         * @param name
         * @return boolean
         */
        public static boolean containsBean(String name)
        {
            return beanFactory.containsBean(name);
        }
    
        /**
         * 判斷以給定名字註冊的bean定義是一個singleton還是一個prototype。 如果與給定名字相應的bean定義沒有被找到,將會丟擲一個異常(NoSuchBeanDefinitionException)
         *
         * @param name
         * @return boolean
         * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
         *
         */
        public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
        {
            return beanFactory.isSingleton(name);
        }
    
        /**
         * @param name
         * @return Class 註冊物件的型別
         * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
         *
         */
        public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
        {
            return beanFactory.getType(name);
        }
    
        /**
         * 如果給定的bean名字在bean定義中有別名,則返回這些別名
         *
         * @param name
         * @return
         * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
         *
         */
        public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
        {
            return beanFactory.getAliases(name);
        }
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if(SpringUtils.applicationContext == null){
                SpringUtils.applicationContext  = applicationContext;
            }
    
        }
    
        //獲取applicationContext
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
    
    }
    

相關推薦

springboot普通執行訪問service

首先線上程類上註解@Component @Autowired private IStudentService studentService; 呼叫時候studentService = SpringUtils.getBean("studentService")

Java執行池及其實現ThreadPoolExecutor

前言:像我們連線資料庫一樣,需要不斷地建立連線,銷燬連線,如果都是人為地一個個建立和銷燬的話會很費勁,所以就誕生了資料庫連線池,執行緒池的產生也是同樣的道理。 執行緒池預先建立了若干數量的執行緒,並且不能由使用者直接對執行緒的建立進行控制,在這個前提下重複使用固定或較為固定數目的執行緒來完成任務

Springboot使用執行池ThreadPoolTaskExecutor

package com.markor.template.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotat

java 內部類來將執行 程式碼隱藏在

package org.rui.thread.basic; import java.util.concurrent.TimeUnit; /** * 有時通過使用內部類來將執行緒 程式碼隱藏在類中 將會很有用,就像下面這樣: * ----- * InnerThrea

ThreadLocal:解決多執行安全訪問 靜態變數 的問題

JAVA 多執行緒程式設計 安全結論: 靜態變數:執行緒非安全。 靜態變數即類變數,位於方法區,為所有物件共享,共享一份記憶體,一旦靜態變數被修改,其他物件均對修改可見,故執行緒非安全。 例項變數:單例模式(只有一個物件例項存在)執行緒非安全,非單例執行緒安全。 例項變

Android執行訪問資料庫、DBHelper

DBHelper: package com.ruru.sqlitedemo; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.dat

一個有兩個方法,其中一個是同步的,另一個是非同步的; 現在又兩個執行A和B,請問:當執行A訪問此類的同步方法時,執行B是否能訪問此類的非同步方法?

一個類有兩個方法,其中一個是同步的,另一個是非同步的;現在又兩個執行緒A和B,請問:當執行緒A訪問此類的同步方法時,執行緒B是否能訪問此類的非同步方法? 答案:可以 驗證 package com.my.test2; public class ClassA { public syn

C#多執行非同步訪問winform控制元件

我們在做winform應用的時候,大部分情況下都會碰到使用多執行緒控制介面上控制元件資訊的問題。然而我們並不能用傳統方法來做這個問題,下面我將詳細的介紹。       首先來看傳統方法:      public partial class Form1 : Form    

C# Winform專案執行環境下, 如何跨執行對Window窗體控制元件進行安全訪問

請嘗試執行這段程式碼, 結果你會發現微軟開發工具會提示, Tb_Text.Text = int_Index.ToString(); 涉及"對Windows窗體控制元件進行執行緒安全呼叫", 並給瞭如下的解決方案:https://msdn.microsoft.com/zh-cn/library/ms171728

執行呼叫單例的方法會不會造成執行安全問題

區域性變數不會受多執行緒影響 成員變數會受到多執行緒影響 多個執行緒應該是呼叫的同一個物件的同一個方法: 如果方法裡無成員變數,那麼不受任何影響 如果方法裡有成員變數,只有讀操作,不受影響                      存在寫操作,考慮多執行緒影響值 當多個執行

SpringBoot自動執行

@Service public class TokenOutOfDateHandler implements InitializingBean, ApplicationContextAware { @Autowired AdminService

自己在之前做兩個專案遇到多執行併發訪問如何解決的一個簡單demo程式

package com.geloin.main; public class TestMoreThread { public static void main(String[] args) { final test t0=new test(); final te

java高併發系列 - 第16天:JUC等待多執行完成的工具CountDownLatch,必備技能

這是java高併發系列第16篇文章。 本篇內容 介紹CountDownLatch及使用場景 提供幾個示例介紹CountDownLatch的使用 手寫一個並行處理任務的工具類 假如有這樣一個需求,當我們需要解析一個Excel裡多個sheet的資料時,可以考慮使用多執行緒,每個執行緒解析一個sheet裡的資料

如何在匿名thread子保證執行安全

在做效能測試的過程中,我寫了兩個虛擬類ThreadLimitTimeCount和ThreadLimitTimesCount做框架,通過對執行緒的標記來完成超時請求的記錄。舊方法如下: @Override protected void after() { requestMark.add

java多執行物件鎖、鎖、同步機制詳解

1.在java多執行緒程式設計中物件鎖、類鎖、同步機制synchronized詳解:     物件鎖:在java中每個物件都有一個唯一的鎖,物件鎖用於物件例項方法或者一個物件例項上面的。     類鎖:是用於一個類靜態方法或者class物件的,一個

top、ps命令檢視程序執行方法

方法一:PS ps -a顯示所有程序pid,“-T”選項可以開啟執行緒檢視。 eg: ps -aT 顯示所有執行緒 方法二: Top top用於實時檢視各個執行緒情況,用top命令的“-H”選項,該選項會列出所有Linux執行緒。 eg1. top -H 所有執行緒 eg2.

執行執行設定超時退出監控

前言 在寫多執行緒程式時,大多數情況下會先excutor建立執行緒池,然後再建立執行緒,但是對一些讀資料庫或者其他IO操作,容易堵住執行緒,此時就需要給執行緒設定超時時間,幹掉超時的執行緒再重新拉起一個執行緒來,但是java執行緒建立並沒有預留超時引數,研究了一下網上也沒找到

Spring 執行安全性

Spring與執行緒安全   Spring作為一個IOC/DI容器,幫助我們管理了許許多多的“bean”。但其實,Spring並沒有保證這些物件的執行緒安全,需要由開發者自己編寫解決執行緒安全問題的程式碼。   Spring對每個bean提供了一個s

Qt實現執行安全的單例模式

之前專案中用到單例模式,用的是執行緒不安全的,這次專案用到了多執行緒,所以想到實現一個執行緒安全的單例模式。經過查詢資料,發現Qt本身有自己的執行緒安全單例模式實現方式。 Q_GLOBAL_STATIC巨集 使用方法:MonitorWindow.h #ifndef MONITORW

觀察者模式執行執行訂閱事件並順序執行的問題

       對事件釋出訂閱模式中啟動執行緒執行操作,但又要保證執行緒順序執行的一些思考和實踐,在開發過程中,經常會遇到需要使用事件來觸發方法執行的情況,比如CS中按鈕的點選事件,滑鼠移動事件,鍵盤監聽事件等等,有時候需要執行比較耗時的任務,但並不希望阻塞主執