麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

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

2024-07-14 08:41:55
字體:
來源:轉載
供稿:網友

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

定義一個沒有被Spring管理的Controller

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上下文的工具類,如下

工具類

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上下文,代碼如下:

@SpringBootApplicationpublic class HelloApplication {  public static void main(String[] args) {    ApplicationContext app = SpringApplication.run(HelloApplication.class, args);    SpringContextUtil.setApplicationContext(app);  }  }

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

@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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 激情综合在线 | 久久爽久久爽久久av东京爽 | fc2国产成人免费视频 | 羞羞羞羞视频 | 亚洲精品欧美在线 | 黄色网址在线播放 | 久久精品国产99久久久古代 | 911精品影院在线观看 | 免费一级欧美在线观看视频 | 成人精品久久久 | 日本不卡一区二区三区在线 | 久久久久99精品 | 久久国产精品二国产精品 | 九九视屏| 黄色影院在线 | 蜜桃网站在线 | 少妇的肉体的满足毛片 | 欧美一级网 | 欧美爱爱视频免费看 | 欧美a一| 毛片av网 | 欧日韩在线视频 | 国产精品视频导航 | 免费看日韩av | 国产69精品久久久久孕妇黑 | www视频免费观看 | 懂色av懂色aⅴ精彩av | 免费国产a | 男人天堂新地址 | 久久久婷婷一区二区三区不卡 | 性欧美大战久久久久久久免费观看 | 国产精品久久久久无码av | 黄污在线看| 午夜视频导航 | 中文字幕在线网 | 久久免费视频1 | 一级免费大片 | 欧美日韩精品一区二区三区蜜桃 | 在线播放视频一区二区 | www成人在线观看 | 精品一区二区亚洲 |