spring 源码之核心注解 (1-1)

spring 源码之核心注解

用法总结

用法总结 1

  • @ComponentScan 注解,可以扫描指定包下的bean,这些bean 会被spring 管理,不需要在 config 文件里写 @bean
  • FactoryBean注册对象,BeanFactory 获取对象
  • @Conditional 加到 @Bean 下边,可以控制是否注入该对象
  • @Import 可以替换 @Bean 【导入第三方jar包用的】 bean注解注册的 bean的id是以方法名称 @Import以当前类完整路径地址注册 @Import注入类更加简单

用法总结 2

2.1 @Enable… 注解 --> 只要启动的时候 加入该EnablePayEntity 就会将PayEntity等实体类注入到spring ioc容器

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({PayEntity.class,MyPayEntity.class})
public @interface EnablePayEntity {
    // 只要启动的时候 加入该EnablePayEntity  就会将PayEntity实体类注入到spruingioc容器
    // Enable注解的话 底层 实际上在调用@Import(PayEntity.class) 
}

2.2 Selector (等于又做了一层封装)

public class MyImportSelector implements ImportSelector {
    /**
     *  注解信息
     * @param importingClassMetadata
     * @return
     */
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.mayikt.v1.entity.MemberEntity","com.mayikt.v1.entity.MsEntity"};
    }
}

用法:@Import({Win7Entity.class, MyImportSelector.class})

2.3 ImportBeanDefinitionRegistrar (手动注册bean)

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    /**
     * AnnotationMetadata 注解的信息
     */
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        // Bean Definition Registry
        // spring容器中 bean 的信息 Bean Definition描述   手动注册到ioc容器中
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(SmsEntity.class);
        registry.registerBeanDefinition("smsEntity", rootBeanDefinition);
        // 底层源码吗? springioc 底层通过beanDefinitionMap存放 线程是安全的
    }
    //FactoryBean (往IOC容器存储对象 注入对象) BeanFactory(从ioc工厂获取bean对象)
}

用法: 加 compont 或者 @Import({MyImportBeanDefinitionRegistrar.class, MyImportSelector.class})

2.4 FactoryBean

public class MyFactoryBean implements FactoryBean<MyEntity> {
    public MyEntity getObject() throws Exception {
        return new MyEntity();
    }
    public Class<?> getObjectType() {
        return MyEntity.class;
    }
    //往IOC容器中注入对象
    public boolean isSingleton() {
        // 默认的情况下就是为true true表示为单例 false 表示为多例
        return false;
    }
}

用法:加 compont 或者 @Import MyFactoryBean 实际 就是 MyEntity

2.5 @Autowired 是通过类型查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值