這篇文章給大家介紹Springboot中怎么加載自定義注解bean,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)公司專注于滎經(jīng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供滎經(jīng)營銷型網(wǎng)站建設(shè),滎經(jīng)網(wǎng)站制作、滎經(jīng)網(wǎng)頁設(shè)計(jì)、滎經(jīng)網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開發(fā)服務(wù),打造滎經(jīng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供滎經(jīng)網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
使用場(chǎng)景:
添加中間件,配置某個(gè)注解的自定義掃描路徑,例如:dubbo的@Service@Refrence,Seata的@Refrence。
使用自定義注解,配置自定義注解的掃描路徑。
配置代碼:
/** * @author yuan * 加載指定包路徑下的自定義注解實(shí)例 */ public class StateImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { // 不使用默認(rèn)的TypeFilter ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); // 添加掃描規(guī)律規(guī)則,這里指定了內(nèi)置的注解過濾規(guī)則 provider.addIncludeFilter(new AnnotationTypeFilter(StateService.class)); // 獲取掃描結(jié)果的全限定類名 ListclassName = new ArrayList<>(); // 掃描指定包,如果有多個(gè)包,這個(gè)過程可以執(zhí)行多次 String[] packages = getPackageToScan(annotationMetadata); for (String aPackage : packages) { Set beanDefinitionSet = provider.findCandidateComponents(aPackage); beanDefinitionSet.forEach(beanDefinition -> className.add(beanDefinition.getBeanClassName())); } String[] classNameArray = new String[className.size()]; return className.toArray(classNameArray); } private String[] getPackageToScan(AnnotationMetadata metadata) { //通過自定義注解獲取自定義包路徑 AnnotationAttributes attributes = AnnotationAttributes.fromMap( metadata.getAnnotationAttributes(EnabledStateMachine.class.getName())); String[] basePackages = attributes.getStringArray("basePackages"); if (basePackages.length != 0) { return basePackages; } return new String[]{ClassUtils.getPackageName(metadata.getClassName())}; } }
將StateImportSelector加入的注解中,以便自動(dòng)注入
/** * @author yuan */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import({StateImportSelector.class}) public @interface EnabledStateMachine { String[] basePackages() default {}; }
關(guān)于Springboot中怎么加載自定義注解bean就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。