1. 程式人生 > >獲取Spring載入的例項bean/獲取註解Beam

獲取Spring載入的例項bean/獲取註解Beam


1,編寫工具類

package com.cfwx.rox.web.business.essence.util;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 獲取spring的注入bean 工具類
 * @author JSW
 *
 */
public class SpringContextUtil implements ApplicationContextAware
{
    
    private static  ApplicationContext context = null;
    
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
    {
        context = applicationContext;
    }
    
    /**
     * 獲取在*.xml檔案中有注入的bean
     * @param beanName
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String beanName){
        return (T) context.getBean(beanName);
    }

    /**
     * 獲取到的類的例項物件
     */
    private Map<String, Object> classInstances;
    
    /**
     * 獲取到的類的例項物件 指定spring註解的類物件
     */
    public Map<String, Object> getClassInstances() {
        if(this.classInstances == null){
            init();
        }
        return this.classInstances;
    }
    
    
    
    @SuppressWarnings("static-access")
    public void init(){
        if(this.context == null){
            return;
        }
        if(this.classInstances == null){
            this.classInstances = new HashMap<String,Object>();
        }
        
        Map<String, Object> beansWithAnnotationMap = this.context.getBeansWithAnnotation(org.springframework.stereotype.Service.class);
        
        Class<? extends Object> clazz = null;
        for(Map.Entry<String, Object> entry : beansWithAnnotationMap.entrySet()){
            clazz = entry.getValue().getClass();//獲取到例項物件的class資訊
            Class<? extends Object>  [] interfaces = clazz.getInterfaces();
            for(Class<? extends Object>  aInterface : interfaces){
                //介面例項名(只是將介面的首字母換成小寫)
                String aInterfaceSimpleName = getDefaultInstanceName(aInterface);
                classInstances.put(aInterfaceSimpleName, entry.getValue());
            }
        }
    }
    
    /**
     * 根據這個類來獲取預設的例項名(預設:將首字母換成小寫)
     * @param clazz  類資訊
     * @return 預設的例項名
     */
    public static String getDefaultInstanceName(Class<?> clazz) {
        if (clazz == null) {
            return null;
        }
        String className = clazz.getSimpleName();
        String firsrLowerChar = className.substring(0, 1).toLowerCase();
        className = firsrLowerChar + className.substring(1);
        return className;
    }
    
    
    

}


2, application.xml中注入

    <bean id="springContextUtil" class="com.cfwx.rox.web.business.essence.util.SpringContextUtil"></bean>
    

3, web.xml中配置監聽

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

相關推薦

獲取Spring載入例項bean/獲取註解Beam

1,編寫工具類 package com.cfwx.rox.web.business.essence.util; import java.util.HashMap; import java.util.Map; import org.springframework.be

spring boot獲取注入的例項bean

之前實現的在spring boot裡整合的工具類獲取spring 注入的bean,期間出現很多問題,其中@configuartion一定要加。再是實現applicationContextAware介面! @Configuration   public class BeanT

如何在手動獲取spring中的beanSpring ApplicationContextAware獲取上下文)

conf string str over 映射 div pre bean對象 nco 一、目的 寫了一個項目,多個module,然後想在A模塊中實現固定的config註入,當B模塊引用A時候,能夠直接填寫相對應的配置信息就行了。但是遇到一個問題,B引用A時候,A的配置信息總

獲取spring例項物件

首先要繼承ApplicationContextAware來獲取上下文:ApplicationContext public class SpringContextUtils implements ApplicationContextAware { private static Appl

普通Java類獲取spring 容器的bean的5種方法 Spring注入非單例bean以及scope的作用範圍

本文轉載自:http://www.cnblogs.com/duanxz/archive/2014/06/18/3794075.html 方法一:在初始化時儲存ApplicationContext物件方法二:通過Spring提供的工具類獲取ApplicationContext物件方法三:繼承自抽象類Appli

實現ApplicationContextAware介面,java(new或者java反射獲取的物件)中獲取spring容器的bean

本文參考了https://blog.csdn.net/bailinbbc/article/details/76446594,其實是拷貝了很多內容: 在Web應用中,Spring容器通常採用宣告式方式配置產生:開發者只要在web.xml中配置一個Listener,該Listener將會負責初始化S

Spring如何管理Java普通類(Java類獲取Spring容器的bean

方法一:在初始化時儲存ApplicationContext物件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.x

通過監聽器 獲取Spring載入後的applicationContext

最近遇到的是這樣一個問題:需要在Spring完成載入之後,獲取到Spring管理的 ApplicationContext。上網查了幾個方法,大家都說實現介面ApplicationContextAware實現該介面的setApplicationContext(Applicati

SpringContextUtil工具類-獲取spring中的bean物件

/** * 獲取spring中的bean物件工具類 * @date 2018-07-23 17:42 */ @Component public class SpringContextUtil implements ApplicationContextAware {

(一)Spring IoC原始碼-2.bean載入-03從FactoryBean例項獲取目標例項

無論是已經載入到了單例bean還是建立bean後,都需要通過bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);從bean例項中獲取目標物件。 無論是從快取中獲取到

Spring原始碼閱讀】 preInstantiateSingletons方法分析,單例Bean獲取/例項化流程

在初始化ClassPathXmlApplicatonContext過程中,核心初始化邏輯在AbstractApplicationContext的refresh函式中: public void refresh() throws BeansException, IllegalStateE

Spring原始碼閱讀——Bean載入獲取過程

我們經常使用Spring,並且也都瞭解其大概原理。我想我們一定會對Spring原始碼的解讀有迫切的渴望。 我也如此。所以,我打算閱讀一下Spring的原始碼。再此之前,我也為此準備了很多。包括,去複習熟練java反射,理解常用的設計模式。當然,這些複習筆記也會在今後的複習中

在過濾器filter中獲取spring管理bean的物件例項

有時我們需要在過濾器中獲取自動注入的物件的例項,如果在filter中也通過自動注入的方式往往得到的結果是null,如果通過new一個物件的話,有時可能是我們想要的結果,有時我們只是想獲取spring上下文中唯一的一個例項,spring預設是單例項模式,這樣的話通過自動注入和n

獲取spring的上下文,並獲取註解bean方式

package com.stdsoft.wisdomh.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext;

bean載入(四)從bean例項獲取物件

在getBean方法中,getObjectForBeanInstance是個頻繁使用的方法,無論是從快取中獲得bean還是根據不同的scope策略載入bean.總之,我們得到bean的例項後,要做的第一步就是呼叫這個方法來檢測一下正確性,其實就是檢測獲得Bean是不是Fac

程式碼獲取Spring註解bean

方法一  不用配置xml,直接java程式碼實現 public class GetApplicationContext { private static class ApplicationContextHolder { // 單例變數 private static Applicat

quartz如何獲取spring註解注入的bean

其實很簡單,如下: public class ExampleJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext con

static關鍵字,引發的spring普通類獲取springbean的思考

pan conf ati ets 普通 blog 編譯器 自定義 這也 在c++和java中static關鍵字用於修飾靜態成員變量和成員函數 舉例一個普通的javabean class AA { int a; static int b; geta/set

Spring 自定義Bean 實例獲取

pan 定義 turn get 漏洞 封裝 @override stat public 一、通過指定配置文件獲取, 對於Web程序而言,我們啟動spring容器是通過在web.xml文件中配置,這樣相當於加載了兩次spring容器 ApplicationContext

手動獲取spring的ApplicationContext和bean對象

text oftype except process red span containe class throws WEB項目: 方法1: ?1ApplicationContext ac1 = WebApplicationContextUtils.getRequiredW