SpringBoot解決@Component無法注入其他Bean的問題
SpringBoot @Component無法注入其他Bean
一、現(xiàn)象
在SpringBoot新new一個普通類,習慣性添加@Component讓Spring掃描。
在@Component修飾的類里注入了其他Bean,運行時提示注入的為null
但這個Bean可以在控制層被引入,在普通類就不行。
二、解決
找了些資料,最后也沒解決注入的問題。
最后的方案就是去掉@Component注解,在new這個普通類時從Spring上下文實例中取出這個Bean賦給成員變量使用。
弊端:這個類非單例
三、代碼如下
ApplicationContextProvider
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class ApplicationContextProvider implements ApplicationContextAware { /** * 上下文對象實例 */ private static ApplicationContext applicationContext; @SuppressWarnings("static-access") @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } /** * 獲取applicationContext * * @return */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 通過name獲取 Bean. * * @param name * @return */ public static Object getBean(String name) { return getApplicationContext().getBean(name); } /** * 通過class獲取Bean. * * @param clazz * @param <T> * @return */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } /** * 通過name,以及Clazz返回指定的Bean * * @param name * @param clazz * @param <T> * @return */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }
IdentityCheckUtil
import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.FullHttpRequest; import org.apache.log4j.Logger; public class IdentityCheckUtil { private Logger logger = Logger.getLogger(IdentityCheckUtil.class); private UserMapper userMapper; public IdentityCheckUtil() { this.userMapper = ApplicationContextProvider.getBean(UserMapper.class); } public boolean allowedPass(ChannelHandlerContext ctx, FullHttpRequest fullHttpRequest) { System.out.println(userMapper); } }
@Component注解自動注入失效問題
使用@Component聲明 進行自動注入失效
@Component,在默認情況下只能掃描與控制器在同一個包下以及其子包下的@Component注解,以及能將指定注解的類自動注冊為Bean的@Service@Controller和@ Repository,將接口與對應實現(xiàn)類放在了與控制器所在包的同一級目錄下,這樣的注解自然是無法被識別的。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Mybatis查找返回Map,List集合類型的數(shù)據(jù)方式
這篇文章主要介紹了Mybatis查找返回Map,List集合類型的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Java excel數(shù)據(jù)導入mysql的實現(xiàn)示例詳解
今天教大家如何使用Java將excel數(shù)據(jù)導入MySQL,文中有非常詳細的代碼示例,對正在學習java的小伙伴呢很有幫助,需要的朋友可以參考下2022-08-08java.lang.Instrument 代理Agent使用詳細介紹
這篇文章主要介紹了java.lang.Instrument 代理Agent使用詳細介紹的相關資料,附有實例代碼,幫助大家學習參考,需要的朋友可以參考下2016-11-11