@Enable*原理实现

Enable原理实现

首先我们要明白Import的使用,因为Enable*封装了Import

@Import四种使用方式

导入类:
@Import(xxx.class)
会将导入的类加载到IOC容器中

导入配置类
@Import(xxxConfig.xxx)
会将配置类中的所有符合条件的bean导入到配置类中

通过实现ImportSelector接口

第一步:

public class MyEnableSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
    	//返回要加载的类的全类名
        return new String[]{"com.songjiayu.bean.User"};
    }

    @Override
    public Predicate<String> getExclusionFilter() {
        return null;
    }
}

第二步
@Import(MyEnableSelector.class)

通过实现ImportBeanDefinitionRegistrar接口
第一步

public class MyImportBeanDefinitionRegister implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//        获得AbstractBeanDefinition对象
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
//        将user填入到ioc容器中
        registry.registerBeanDefinition("user",beanDefinition);
    }
}

第二步:
@Import(MyImportBeanDefinitionRegister.class)

Enable原理

上面说到Enable底层就是通过Import来实现的,可以这么说他就是调用了Import

那我们直接上代码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(UserConfig.class)		//导入配置类
public @interface EnableUser {
}

说明:当我们去调用EnableUser的时候,其实就是间接调用了@Import(UserConfig.class)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值