您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Springboot怎么通過自定義工具類獲取bean”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Springboot怎么通過自定義工具類獲取bean”這篇文章吧。
/** * Created with IntelliJ IDEA. * * @Auther: zp * @Date: 2021/03/26/13:32 * @Description: 通過beanFactory獲取spring管理的bean對象工具類 */ @Component public class ApplicationContextUtil implements ApplicationContextAware { private static ApplicationContext context; // springboot加載完成后會把beanfactory作為參數(shù)傳給次方法,然后我們可以把工廠賦值給context。 @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } // 通過context獲取bean public static Object getBean(String beanName) { return context.getBean(beanName); } }
比如:在進行使用HandlerInterceptorAdapter攔截器時,需要訪問數(shù)據(jù)庫來判斷是否攔截請求,這時就需要在攔截器的判斷類中注入Dao或Service對象來執(zhí)行sql語句。而直接使用@Autowired無法進行注入。
spring boot 2.0.3
在applicationContext對象中可以獲取到所有的bean
第一步:準備ApplicationContextAware的實現(xiàn)類,用于獲取applicationContext對象
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import com.authstr.ff.utils.exception.Assert; @Component public class SpringUtils implements ApplicationContextAware { private static Log log = LogFactory.getLog(SpringUtils.class); private static ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) { SpringUtils.applicationContext = applicationContext; } private static ApplicationContext getContext() { return applicationContext; } public static Object getBean(String beanId) { return SpringUtils.getBean(Object.class, beanId); } public static <T> T getBean(Class<T> clazz, String beanId) throws ClassCastException { ApplicationContext context = SpringUtils.getContext(); Assert.isTrue(StringUtils.hasText(beanId), "beanId must not null!",true); boolean a=context.containsBean(beanId); Assert.isTrue(context.containsBean(beanId), "beanId :[" + beanId + "] is not exist!",true); Object bean = null; bean = context.getBean(beanId); return (T)bean; } }
這是已經(jīng)寫好的工具類,可以根據(jù)bean的id獲取對應的bean
第二步: 對要獲取的bean設置id
如:
@Component("basicDaoImpl") public class BasicDaoImpl extends AbstractDao implements BasicDao
第三步: 在要使用的類中寫一個方便調(diào)用的方法
public BasicDaoImpl getBasicDaoImpl (){ return SpringUtils.getBean(BasicDaoImpl .class, "basicDaoImpl"); }
第一步:當前類添加@Component注解
第二步:對要獲取的對象使用@Autowired 注解
@Autowired private BasicDaoImpl basicDaoImpl;
第三步:在創(chuàng)建該工具類的地方,這樣定義
@Bean public AuthInterceptor authInterceptor(){ return new AuthInterceptor(); }
在本質(zhì)上,同方法二
第一步:當前類添加@Component注解
第二步:在工具類創(chuàng)建一個自身的靜態(tài)對象
public static AuthInterceptor authInterceptor;
第三步:使用@PostConstruct注解,在springboot加載時執(zhí)行該方法
@PostConstruct public void init() { authInterceptor= this; AuthInterceptor .authInterceptor= this.authInterceptor; }
以上是“Springboot怎么通過自定義工具類獲取bean”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。