1. 程式人生 > >Idea springBoot配置器中 @Configuration 註解中使用 Autowired 注入報錯

Idea springBoot配置器中 @Configuration 註解中使用 Autowired 注入報錯

因為在SB專案的啟動的最初階段,IDE載入注入配置器bean,還沒有掃描到工程的bean,無法發現對應的 bean ,於是就需要我們手動的給其指定需要掃描的包

使用 @ComponentScan註解並指定所需model類的包地址就可以解決整個問題了
@Configuration
@ComponentScan({"com.ahies.itsm.system.permission.service"})
這裡介紹另一種注入bean方法,但是不能解決上面的這個問題,原因暫時未理清

1,使用springframework相關jar

用自定義工具類注入

SpringContextUtils.getBean(ItsmSystemResourceService.class);

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
 * Spring Context工具類.
 *
 * @author chengyuebin
 */
@Component
@Scope("singleton")
public class SpringContextUtils implements ApplicationContextAware {

    /**
     * Spring應用上下文環境.
     */
    private static ApplicationContext applicationContext;

    /**
     * 實現ApplicationContextAware介面的回撥方法,設定上下文環境
     *
     * @param applicationContext     * @throws BeansException
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtils.applicationContext = applicationContext;
    }

    /**
     * 獲取ApplicationContext.
* * @return ApplicationContext */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 獲取物件. * * @param name * @return Object 一個以所給名字註冊的bean的例項 * @throws BeansException */ @SuppressWarnings("unchecked") public static <T> T getBean(String name) throws BeansException { return (T) applicationContext.getBean(name); } /** * 獲取型別為requiredType的物件. * * @param clz * @return * @throws BeansException */ public static <T> T getBean(Class<T> clz) throws BeansException { return (T)applicationContext.getBean(clz); } /** * 如果BeanFactory包含一個與所給名稱匹配的bean定義,則返回true * * @param name * @return boolean */ public static boolean containsBean(String name) { return applicationContext.containsBean(name); } /** * 判斷以給定名字註冊的bean定義是一個singleton還是一個prototype。 * 如果與給定名字相應的bean定義沒有被找到,將會丟擲一個異常(NoSuchBeanDefinitionException) * @param name * @return boolean * @throws NoSuchBeanDefinitionException */ public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { return applicationContext.isSingleton(name); } /** * @param name * @return Class 註冊物件的型別 * @throws NoSuchBeanDefinitionException */ public static Class<?> getType(String name) throws NoSuchBeanDefinitionException { return applicationContext.getType(name); } /** * 如果給定的bean名字在bean定義中有別名,則返回這些別名 * * @param name * @return * @throws NoSuchBeanDefinitionException */ public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { return applicationContext.getAliases(name); } }