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 是通过类型查找