日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Web项目中获取SpringBean——在非Spring组件中获取SpringBean

發(fā)布時(shí)間:2025/3/20 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web项目中获取SpringBean——在非Spring组件中获取SpringBean 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  最近在做項(xiàng)目的時(shí)候我發(fā)現(xiàn)一個(gè)問題:Spring的IOC容器不能在Web中被引用(或者說不能被任意地引用)。我們在配置文件中讓Spring自動(dòng)裝配,但并沒有留住ApplicationContext的實(shí)例。我們?nèi)绻M谖覀兊捻?xiàng)目中任何位置都能拿到同一個(gè)ApplicationContext來獲取IOC容器中的資源,就要讓Spring將上下文環(huán)境填充到我們能獲取的地方,比如下面的做法(來自網(wǎng)絡(luò)資源):

  自定義一個(gè)工具類,實(shí)現(xiàn)自ApplicationContextAware接口,接口的方法是setApplicationContext,我們實(shí)現(xiàn)它,并讓其為我們服務(wù),因?yàn)镾pring在load自己的時(shí)候會(huì)將上下文環(huán)境填充進(jìn)來。我們所要做的就是將得到的ApplicationContext保存下來用。

1 package org.coderecord.ccms.web.action.util; 2 3 import org.springframework.beans.BeansException; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.ApplicationContextAware; 6 7 /** 8 * Spring IOC上下文工具類 9 * 10 * @author Ryan Shaw 11 * 12 */ 13 public class SpringUtil implements ApplicationContextAware { 14 15 /** 16 * 當(dāng)前IOC 17 */ 18 private static ApplicationContext applicationContext; 19 20 /** 21 * 設(shè)置當(dāng)前上下文環(huán)境,此方法由spring自動(dòng)裝配 22 */ 23 @Override 24 public void setApplicationContext(ApplicationContext arg0) 25 throws BeansException { 26 applicationContext = arg0; 27 } 28 29 /** 30 * 從當(dāng)前IOC獲取bean 31 * 32 * @param id 33 * bean的id 34 * @return 35 */ 36 public static Object getObject(String id) { 37 Object object = null; 38 object = applicationContext.getBean(id); 39 return object; 40 } 41 42 }

  上文的類就是我們要用的,而其中的setApplicationContext是接口中需要實(shí)現(xiàn)的,Spring會(huì)自動(dòng)進(jìn)行填充。我們在Spring的配置文件中注冊一下:

1 <bean id="springUtil" class="org.coderecord.ccms.web.action.util.SpringUtil" />

  這樣就可以了,Spring把我們需要的東西給我們了。

  我們就可以在需要的地方這樣做:

1 YouClass obj = (YouClass)SpringUtil.getObject("beanid");

  當(dāng)然,前提是你需要讓Spring自動(dòng)裝配哦。

  

  以下為方法二,使用了注解和靜態(tài)化的方式來產(chǎn)生SpringFactory對象

  來自網(wǎng)絡(luò)資源,修改于2013-04-11 15:25:57?

  上文的方法有個(gè)麻煩的地方:需要配置。而Spring2.5及之后的版本實(shí)際上加入了注解的方式進(jìn)行依賴項(xiàng)的注入,使用如下代碼也許更好:

1 package org.ahe.util; 2 3 import org.springframework.beans.factory.BeanFactory; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.web.context.support.SpringBeanAutowiringSupport; 6 7 public class SpringWiredBean extends SpringBeanAutowiringSupport { 8 9 /** 10 * 自動(dòng)裝配注解會(huì)讓Spring通過類型匹配為beanFactory注入示例 11 */ 12 @Autowired 13 private BeanFactory beanFactory; 14 15 private SpringWiredBean() { 16 } 17 18 private static SpringWiredBean instance; 19 20 static { 21 // 靜態(tài)塊,初始化實(shí)例 22 instance = new SpringWiredBean(); 23 } 24 25 /** 26 * 實(shí)例方法 27 * 使用的時(shí)候先通過getInstance方法獲取實(shí)例 28 * 29 * @param beanId 30 * @return 31 */ 32 public Object getBeanById(String beanId) { 33 return beanFactory.getBean(beanId); 34 } 35 36 public static SpringWiredBean getInstance() { 37 return instance; 38 } 39 }

  如果使用@Autowired注解自動(dòng)裝配的話,繼承SpringBeanAutowiringSupport類是不能少的。當(dāng)然,使用@Component等注解也是可以的。使用注解的話配置就需要改動(dòng)了,不過因?yàn)槲覀優(yōu)橹С諷pring注解的配置是可以多用的,所以還好。如下:

1 <context:component-scan base-package="org.ahe"></context:component-scan>

  該配置即可讓org.ahe下所有包(您依然可以通過子標(biāo)簽的正則表達(dá)式匹配來進(jìn)行更多設(shè)置)下的注解起作用。

?

?歡迎您移步我們的交流群,無聊的時(shí)候大家一起打發(fā)時(shí)間:

?或者通過QQ與我聯(lián)系:

?    (最后編輯時(shí)間2013-04-11 16:59:45)

轉(zhuǎn)載于:https://www.cnblogs.com/Johness/archive/2012/12/25/2833010.html

總結(jié)

以上是生活随笔為你收集整理的Web项目中获取SpringBean——在非Spring组件中获取SpringBean的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。