激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring運行時動態注冊bean的方法

Spring運行時動態注冊bean的方法

2021-05-23 15:44楓葉maple Java教程

這篇文章主要介紹了Spring運行時動態注冊bean的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在spring運行時,動態的添加bean,dapeng框架在解析xml的字段時,使用到了動態注冊,注冊了一個實現了factorybean類!

定義一個沒有被spring管理的controller

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class usercontroller implements initializingbean{
 
  private userservice userservice;
 
  public userservice getuserservice() {
    return userservice;
  }
 
  public void setuserservice(userservice userservice) {
    this.userservice = userservice;
  }
 
  @override
  public void afterpropertiesset() throws exception {
    system.out.println("我是動態注冊的你,不是容器啟動的時候注冊的你");
  }
 
  public string toaction(string content){
    return "-->" + userservice.doservice(content);
  }
}

需要注意的是,如果要注入userservice,需要提供它的getter和setter方法

現在啟動springboot工程,顯而易見這個類是不會被spring管理的,接下來我們定義一個獲取spring上下文的工具類,如下

工具類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class springcontextutil {
  private static applicationcontext applicationcontext;
  //獲取上下文
  public static applicationcontext getapplicationcontext() {
    return applicationcontext;
  }
  //設置上下文
  public static void setapplicationcontext(applicationcontext applicationcontext) {
    springcontextutil.applicationcontext = applicationcontext;
  }
  //通過名字獲取上下文中的bean
  public static object getbean(string name){
    return applicationcontext.getbean(name);
  }
  //通過類型獲取上下文中的bean
  public static object getbean(class<?> requiredtype){
    return applicationcontext.getbean(requiredtype);
  }
}

我們在springboot的啟動類中,保存當前spring上下文,代碼如下:

?
1
2
3
4
5
6
7
8
@springbootapplication
public class helloapplication {
 
  public static void main(string[] args) {
    applicationcontext app = springapplication.run(helloapplication.class, args);
    springcontextutil.setapplicationcontext(app);
  
}

然后我們在另一個被spring管理的容器中,寫如下方法,進行bean的動態注冊

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@getmapping("/bean")
public string registerbean() {
  //將applicationcontext轉換為configurableapplicationcontext
  configurableapplicationcontext configurableapplicationcontext = (configurableapplicationcontext) springcontextutil.getapplicationcontext();
 
  // 獲取bean工廠并轉換為defaultlistablebeanfactory
  defaultlistablebeanfactory defaultlistablebeanfactory = (defaultlistablebeanfactory) configurableapplicationcontext.getbeanfactory();
 
  // 通過beandefinitionbuilder創建bean定義
  beandefinitionbuilder beandefinitionbuilder = beandefinitionbuilder.genericbeandefinition(usercontroller.class);
    
  // 設置屬性userservice,此屬性引用已經定義的bean:userservice,這里userservice已經被spring容器管理了.
  beandefinitionbuilder.addpropertyreference("userservice", "userservice");
 
  // 注冊bean
  defaultlistablebeanfactory.registerbeandefinition("usercontroller", beandefinitionbuilder.getrawbeandefinition());
 
 
  usercontroller usercontroller = (usercontroller) springcontextutil.getbean("usercontroller");
 
  return usercontroller.toaction("動態注冊生成調用");
 
   //刪除bean.
  //defaultlistablebeanfactory.removebeandefinition("testservice");
}

如上,就能動態的注冊bean

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/leihuazhe/p/8137564.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费午夜视频 | 久久99精品久久久久久园产越南 | 免费看综艺策驰影院 | 特级a欧美做爰片毛片 | 爱草在线| 99久久久国产精品免费观看 | 国产精品久久久久影院老司 | 永久免费不卡在线观看黄网站 | 国内免费视频成人精品 | 一区二区三区国产在线 | 国产午夜精品久久久久婷 | 国产九九热 | 国产精品一区二区手机在线观看 | 黄色免费不卡视频 | 在线1区 | 一二区 | 久久精品一区视频 | 日本a级免费 | 国产91久久久久久 | 成人情欲视频在线看免费 | 欧美精品电影一区二区 | 中文字幕在线免费观看电影 | 一级黄色在线免费观看 | 日韩美香港a一级毛片 | 国产精品久久久久久久四虎电影 | 久久羞羞视频 | 91精品久久久久久久 | 免费人成在线播放 | 欧美日韩免费看 | 午夜视频在线观看91 | 日本xxxx色视频在线观看免费, | 精品成人av一区二区三区 | 久久出精品 | 欧美一级片 在线播放 | 国产人成精品一区二区三 | 免费国产a| 国产一级毛片在线看 | 久久污 | 爱性久久久久久久 | 一级免费特黄视频 | av在线浏览 |