我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

Springboot中怎么加载自定义注解bean

这篇文章给大家介绍Springboot中怎么加载自定义注解bean,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联公司专注于荥经网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供荥经营销型网站建设,荥经网站制作、荥经网页设计、荥经网站官网定制、微信平台小程序开发服务,打造荥经网络公司原创品牌,更为您提供荥经网站排名全网营销落地服务。

使用场景:

  1. 添加中间件,配置某个注解的自定义扫描路径,例如:dubbo的@Service@Refrence,Seata的@Refrence。

  2. 使用自定义注解,配置自定义注解的扫描路径。

配置代码:

/**
 * @author yuan
 * 加载指定包路径下的自定义注解实例
 */
public class StateImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        // 不使用默认的TypeFilter
        ClassPathScanningCandidateComponentProvider provider =
                new ClassPathScanningCandidateComponentProvider(false);
        // 添加扫描规律规则,这里指定了内置的注解过滤规则
        provider.addIncludeFilter(new AnnotationTypeFilter(StateService.class));
        // 获取扫描结果的全限定类名
        List className = new ArrayList<>();
        // 扫描指定包,如果有多个包,这个过程可以执行多次
        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加入的注解中,以便自动注入

/**
 * @author yuan
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import({StateImportSelector.class})
public @interface EnabledStateMachine {
    String[] basePackages() default {};
}

关于Springboot中怎么加载自定义注解bean就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网站题目:Springboot中怎么加载自定义注解bean
链接地址:http://mswzjz.cn/article/ipicce.html

其他资讯