springboot~注冊(cè)不同級(jí)別包里的bean~scanBasePackages
對(duì)于springboot來說,它會(huì)把當(dāng)前應(yīng)用程序所在的包裝載到ioc容器里,讓使用者可以直接Autowired注入它們,一般的項(xiàng)目結(jié)果是這樣的,這個(gè)項(xiàng)目包下有main方法,它將會(huì)把nacosdemo這個(gè)包里面所有的bean都掃描出來,然后在程序啟動(dòng)時(shí),nacosdemo里的bean就會(huì)被自動(dòng)注冊(cè)了。

目前我們做一個(gè)測試,在nacosdemo包外層再建立一個(gè)包c(diǎn)ommon,在里面寫個(gè)組件,然后在nacosdemo里去使用它,整個(gè)項(xiàng)目結(jié)構(gòu)如下

這時(shí),項(xiàng)目啟動(dòng)后,是無法加載到你的bean的,因?yàn)樗粫?huì)被掃描到,解決方法是把它添加到掃描包列表里
@SpringBootApplication(scanBasePackages = {"com.lind.nacosdemo", "com.lind.common"})
@EnableDiscoveryClient
public class NacosDemoApplication {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosDemoApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" + userName + "; age: " + userAge);
}
}
在添加時(shí)要注冊(cè),當(dāng)前包的名稱也要加上,否則當(dāng)前包也會(huì)被覆蓋的,這一點(diǎn)要清楚。
測試的代碼
common里的組件bean
@Component
public class RedisConfig {
public void print() {
System.out.println("hello redis!");
}
}
canosdemo包里調(diào)用它
@Autowired
RedisConfig redisConfig;
@RequestMapping("/get")
public String get() {
redisConfig.print();
return username;
}
結(jié)果如圖,我們的方法被調(diào)用到了

這種方法雖然實(shí)現(xiàn)了我們的功能,但需要在程序的入口維護(hù)一坨坨包名,很不友好,下次我們說對(duì)這塊進(jìn)行重構(gòu)。
浙公網(wǎng)安備 33010602011771號(hào)