SpringBoot解決@Component無(wú)法注入其他Bean的問(wèn)題
SpringBoot @Component無(wú)法注入其他Bean
一、現(xiàn)象
在SpringBoot新new一個(gè)普通類(lèi),習(xí)慣性添加@Component讓Spring掃描。
在@Component修飾的類(lèi)里注入了其他Bean,運(yùn)行時(shí)提示注入的為null
但這個(gè)Bean可以在控制層被引入,在普通類(lèi)就不行。
二、解決
找了些資料,最后也沒(méi)解決注入的問(wèn)題。
最后的方案就是去掉@Component注解,在new這個(gè)普通類(lèi)時(shí)從Spring上下文實(shí)例中取出這個(gè)Bean賦給成員變量使用。
弊端:這個(gè)類(lèi)非單例
三、代碼如下
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 {
/**
* 上下文對(duì)象實(shí)例
*/
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;
}
/**
* 通過(guò)name獲取 Bean.
*
* @param name
* @return
*/
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
/**
* 通過(guò)class獲取Bean.
*
* @param clazz
* @param <T>
* @return
*/
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
/**
* 通過(guò)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注解自動(dòng)注入失效問(wèn)題
使用@Component聲明 進(jìn)行自動(dòng)注入失效

@Component,在默認(rèn)情況下只能掃描與控制器在同一個(gè)包下以及其子包下的@Component注解,以及能將指定注解的類(lèi)自動(dòng)注冊(cè)為Bean的@Service@Controller和@ Repository,將接口與對(duì)應(yīng)實(shí)現(xiàn)類(lèi)放在了與控制器所在包的同一級(jí)目錄下,這樣的注解自然是無(wú)法被識(shí)別的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis查找返回Map,List集合類(lèi)型的數(shù)據(jù)方式
這篇文章主要介紹了Mybatis查找返回Map,List集合類(lèi)型的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java excel數(shù)據(jù)導(dǎo)入mysql的實(shí)現(xiàn)示例詳解
今天教大家如何使用Java將excel數(shù)據(jù)導(dǎo)入MySQL,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴呢很有幫助,需要的朋友可以參考下2022-08-08
Java基礎(chǔ)高級(jí)綜合練習(xí)題撲克牌的創(chuàng)建
今天小編就為大家分享一篇關(guān)于Java基礎(chǔ)高級(jí)綜合練習(xí)題撲克牌的創(chuàng)建,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
java.lang.Instrument 代理Agent使用詳細(xì)介紹
這篇文章主要介紹了java.lang.Instrument 代理Agent使用詳細(xì)介紹的相關(guān)資料,附有實(shí)例代碼,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下2016-11-11

