SpringBoot解決@Component無法注入其他Bean的問題
SpringBoot @Component無法注入其他Bean
一、現(xiàn)象
在SpringBoot新new一個普通類,習(xí)慣性添加@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,在默認(rèn)情況下只能掃描與控制器在同一個包下以及其子包下的@Component注解,以及能將指定注解的類自動注冊為Bean的@Service@Controller和@ Repository,將接口與對應(yīng)實現(xiàn)類放在了與控制器所在包的同一級目錄下,這樣的注解自然是無法被識別的。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java?Ribbon與openfeign區(qū)別和用法講解
Ribbon是基于Netflix?Ribbon實現(xiàn)的一套客戶端負載均衡的工具,主要功能是提供客戶端的軟件負載均衡算法和服務(wù)調(diào)用。openfeign對Feign進行了增強,使其支持Spring MVC注解,另外還整合了Ribbon和Nacos,從而使得Feign的使用更加方便2022-08-08
spring boot輸入數(shù)據(jù)校驗(validation)的實現(xiàn)過程
web項目中,用戶的輸入總是被假定不安全不正確的,在被處理前需要做校驗。本文介紹在spring boot項目中實現(xiàn)數(shù)據(jù)校驗的過程,通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-09-09
一次線上websocket返回400問題排查的實戰(zhàn)記錄
最近項目中有端對端通信場景,實時性要求較高,考慮后選用了websocket 這一通信協(xié)議,下面這篇文章主要給大家介紹了一次線上websocket返回400問題排查的實戰(zhàn)記錄,需要的朋友可以參考下2022-04-04

