欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring手動(dòng)獲取bean的四種方式

 更新時(shí)間:2024年01月07日 08:51:09   作者:hvige  
本文主要介紹了Spring手動(dòng)獲取bean的四種方式,包括BeanFactoryPostProcessor接口,ApplicationContextAware接口,注解 @PostConstruct 初始化時(shí)獲取,啟動(dòng)類ApplicationContext獲取這四種方法,感興趣的可以了解一下

一、實(shí)現(xiàn)BeanFactoryPostProcessor接口

@Component
public class SpringUtil implements BeanFactoryPostProcessor {

    private static ConfigurableListableBeanFactory beanFactory;

    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }

    /**
     * 通過(guò)name獲取 Bean對(duì)象
     * @param name
     * @return Object 一個(gè)以所給名字注冊(cè)的bean實(shí)例
     */
    public static  <T> T getBean(String name) {
        return (T) beanFactory.getBean(name);
    }

    /**
     * 通過(guò)class獲取Bean對(duì)象
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz){
        return beanFactory.getBean(clazz);
    }

    /**
     * 如果BeanFactory包含一個(gè)與所給名稱匹配的bean對(duì)象,則返回true
     * @param name
     * @return
     */
    public static boolean containsBean(String name){
        return beanFactory.containsBean(name);
    }

    /**
     * 判斷bean對(duì)象是一個(gè)singleton還是一個(gè)prototype
     * @param name
     * @return
     * @throws NoSuchBeanDefinitionException
     */
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{
        return beanFactory.isSingleton(name);
    }

    /**
     * 通過(guò) name獲取 bean 的類型
     * @param name
     * @return
     * @throws NoSuchBeanDefinitionException
     */
    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException{
        return beanFactory.getType(name);
    }

    /**
     * 通過(guò) name 獲取 bean定義的別名
     * @param name
     * @return
     */
    public static String[] getAliases(String name){
        return beanFactory.getAliases(name);
    }
}

二、實(shí)現(xiàn)ApplicationContextAware接口

@Component
public class BeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        BeanUtil.applicationContext = applicationContext;
    }
    /**
     * 獲取applicationContext
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    /**
     * 通過(guò)name獲取 Bean對(duì)象
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    /**
     * 通過(guò)class獲取Bean對(duì)象
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通過(guò)name和Class返回指定的Bean對(duì)象
     *
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

    /**
     * 獲取當(dāng)前的環(huán)境配置
     * @return
     */
    public static String[] getActiveProfiles(){
        return getApplicationContext().getEnvironment().getActiveProfiles();
    }
}

三、注解 @PostConstruct 初始化時(shí)獲取

@Component
public class BeanStatic {

    @Autowired
    private TestService testService;

    @Autowired
    private static TestService staticTestService;

    /**
     * 用于在依賴關(guān)系注入完成之后需要執(zhí)行的方法上
     * 執(zhí)行任何初始化操作
     */
    @PostConstruct
    public void init() {
        // 初始化時(shí)把testService對(duì)象賦值給當(dāng)前類定義的靜態(tài)變量
        staticTestService = testService;
    }

    // 在當(dāng)前類調(diào)用業(yè)務(wù)接口
    public static String getTest() {
        return staticTestService.test();
    }
}

四、通過(guò)啟動(dòng)類ApplicationContext獲取

@SpringBootApplication
public class WebApplication {

    public static ConfigurableApplicationContext applicationContext;

    public static void main(String[] args) {
        System.out.println("正在啟動(dòng)。。。");
        applicationContext = SpringApplication.run(WebApplication.class, args);
        System.out.println("啟動(dòng)成功");
    }
}
調(diào)用方式
@RestController
@RequestMapping("/bean")
@Api(tags = "手動(dòng)獲取Bean對(duì)象測(cè)試")
public class BeanController {

    @GetMapping("test1")
    @ApiOperation("方式一")
    @ApiOperationSupport(order = 1)
    public IResult test1()
    {
        TestService testService = SpringUtil.getBean(TestService.class);
        String result = testService.test();
        return IResult.success(result);
    }

    @GetMapping("test2")
    @ApiOperation("方式二")
    @ApiOperationSupport(order = 2)
    public IResult test2()
    {
        TestService testService = BeanUtil.getBean(TestService.class);
        String result = testService.test();
        return IResult.success(result);
    }

    @GetMapping("test3")
    @ApiOperation("方式三")
    @ApiOperationSupport(order = 3)
    public IResult test3()
    {
        String result = BeanStatic.getTest();
        return IResult.success(result);
    }

    @GetMapping("test4")
    @ApiOperation("方式四")
    @ApiOperationSupport(order = 4)
    public IResult test4()
    {
        TestService testService = WebApplication.applicationContext.getBean(TestService.class);
        String result = testService.test();
        return IResult.success(result);
    }
}

到此這篇關(guān)于Spring手動(dòng)獲取bean的四種方式的文章就介紹到這了,更多相關(guān)Spring手動(dòng)獲取bean 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入淺析Spring 中的Null-Safety

    深入淺析Spring 中的Null-Safety

    Spring Framework 本身利用了上面這幾個(gè)注釋,但它們也可以運(yùn)用在任何基于Spring的Java 項(xiàng)目中,以聲明空安全api 和 空安全字段。這篇文章主要介紹了Spring 中的Null-Safety相關(guān)知識(shí) ,需要的朋友可以參考下
    2019-06-06
  • Java之BigDecimal實(shí)現(xiàn)詳解

    Java之BigDecimal實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java之BigDecimal實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java多線程編程之慎重使用volatile關(guān)鍵字

    java多線程編程之慎重使用volatile關(guān)鍵字

    volatile關(guān)鍵字相信了解Java多線程的讀者都很清楚它的作用。volatile關(guān)鍵字用于聲明簡(jiǎn)單類型變量,下面看一下為什么要慎重使用volatile關(guān)鍵字
    2014-01-01
  • 用Java將字符串的首字母轉(zhuǎn)換大小寫(xiě)

    用Java將字符串的首字母轉(zhuǎn)換大小寫(xiě)

    在項(xiàng)目開(kāi)發(fā)的時(shí)候會(huì)需要統(tǒng)一字符串的格式,比如首字母要求統(tǒng)一大寫(xiě)或小寫(xiě),那用Java如何實(shí)現(xiàn)這一功能?下面一起來(lái)學(xué)習(xí)學(xué)習(xí)。
    2016-08-08
  • Java內(nèi)存模型與JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的區(qū)別詳解

    Java內(nèi)存模型與JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的區(qū)別詳解

    這篇文章主要介紹了Java內(nèi)存模型與JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 使用idea生成springboot程序的docker鏡像的操作指南

    使用idea生成springboot程序的docker鏡像的操作指南

    這篇文章給大家詳細(xì)的介紹了使用idea生成springboot程序的docker鏡像的操作指南,文中通過(guò)圖文結(jié)合給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • 淺析java程序入口main()方法

    淺析java程序入口main()方法

    這篇文章主要介紹了淺析java程序入口main()方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • httpclient提交json參數(shù)的示例詳解

    httpclient提交json參數(shù)的示例詳解

    httpclient使用post提交json參數(shù),和使用表單提交區(qū)分,本文結(jié)合示例代碼講解的非常詳細(xì),補(bǔ)充介紹了HttpClient請(qǐng)求傳json參數(shù)的案例代碼,感興趣的朋友一起看看吧
    2024-02-02
  • 深入理解Spring事務(wù)及傳播機(jī)制之原理解析與實(shí)際應(yīng)用

    深入理解Spring事務(wù)及傳播機(jī)制之原理解析與實(shí)際應(yīng)用

    Spring事務(wù)管理機(jī)制提供了多種傳播行為,可以控制事務(wù)的范圍和隔離級(jí)別,保證數(shù)據(jù)一致性和完整性。在實(shí)際應(yīng)用中,需要根據(jù)具體業(yè)務(wù)場(chǎng)景選擇合適的傳播行為實(shí)現(xiàn)事務(wù)控制
    2023-04-04
  • java實(shí)現(xiàn)emqx設(shè)備上下線監(jiān)聽(tīng)詳解

    java實(shí)現(xiàn)emqx設(shè)備上下線監(jiān)聽(tīng)詳解

    這篇文章主要為大家介紹了java實(shí)現(xiàn)emqx設(shè)備上下線監(jiān)聽(tīng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論