Spring之多种注入Bean方式

1.使用@Configuration配置容器
//MySpringConfig.java
@Configuration //等同于配置的spring配置文件
@Lazy//默认开启懒加载(True)
public class MySpringConfig {
    @Bean
    public User user() {
        return new User(10, "小明");
    }
}
2.使用注解形式加载IOC
public static void main(String[] args) {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MySpringConfig.class);
    User user = applicationContext.getBean("user", User.class);
    System.out.println(user.toString());
    
     String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
    for (int i = 0; i < beanDefinitionNames.length; i++) {
        System.out.println(beanDefinitionNames[i]);
    }

}
3.使用@ComponentScan扫包注入IOC容器
@ComponentScan("扫包范围")

@ComponentScan中includeFilters属性(包含)和excludeFilter属性(排除)

@ComponentScan(value = "扫包范围", includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class)}, useDefaultFilters = false)

FilterType有五种类型:1.ANNOTATION(注解类型)2.ASSIGNABLE_TYPE:ANNOTATION(指定类型)3.ASPECTJ(按照Aspectj的表达式)4.REGEX(按照正则表达式)5.CUSTOM(自定义)

4.@Condition条件注入Bean

Condition是在Spring4.0增加的条件注解,可以选择性注入Bean。

实现Condition接口及其条件方法,然后再通过@Condition注解条件注入Bean。

5.@Import方式注入Bean

@Import是被用来整合所有在@Configuration注解中定义的Bean配置

6.ImportSelector接口

ImportSelector接口是至spring中导入外部配置的核心接口,在SpringBoot的自动化配置和@EnableXXX(功能性注解)都有它的存在。

public class MyImportSelector implements ImportSelector {
    /**
     * AnnotationMetadata 注解信息
     *
     * @param importingClassMetadata
     * @return
     */
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        // 添加需要注册的spring容器的类
        return new String[]{"com.service.UserService"};
    }
}
//然后通过以上多种方式注入Bean中,例如@Import(MyImportSelector.class)、@Bean
7.ImportBeanDefinitionRegistrar手动注入Bean

实现ImportBeanDefinitionRegistrar接口及其方法

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        // 手动注册bean
        String beanName = "payEntity";
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(PayEntity.class);
        registry.registerBeanDefinition(beanName, rootBeanDefinition);
    }
}
8.使用FactoryBean注册对象
public class MyFactoryBean implements FactoryBean<MemberEntity> {
    public MemberEntity getObject() throws Exception {
        return new MemberEntity();
    }

    public Class<?> getObjectType() {
        return MemberEntity.class;
    }

    public boolean isSingleton() {
        return false;
    }
}
//然后通过以上多种方式注入Bean中,例如@Import(MyFactoryBean.class)、@Bean
9.BeanFactory和FactoryBean区别

BeanFactory:是用于注入Bean对象

FactoryBean:用于获取Bean对象

BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值