SpringBoot基础-注解方式配置bean

本文详细介绍了SpringBoot中注解方式配置bean的多种实现方式,包括使用@Component、配置类中的@Bean、实现FactoryBean接口、BeanDefinitionRegistryPostProcessor接口以及ImportBeanDefinitionRegistrar接口。同时,总结了注解配置bean的优缺点,如简化配置、提高开发效率,但也存在配置分散、对象关系不清晰等不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注解方式配置bean实现方式

@Component声明

  • Cat类
@Getter
@Setter
@Component
public class Cat {

    private String name;

    private Integer age;

    private List<String> hobby;

    public Cat() {
    }


    public Cat(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String get() {
        return this.toString();
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", hobby=" + hobby +
                '}';
    }
}
  • 测试代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class IocTest {

    @Autowired
    private Cat cat;

    @Test
    public void get() {
        System.out.println(cat.get());
    }
}

配置类中使用@Bean

  • 编写MyCatConfiguration文件注册Bean
@Configuration
public class MyCatConfiguration {

    @Bean
    public Cat cat() {
        return new Cat();
    }
}

cat类、测试代码同上,但Cat类需要去除@Component

实现FactorBean接口

  • MyCatFactorBean实现FactoryBean接口
@Component
public class MyCatFactorBean implements FactoryBean<Cat> {
    @Override
    public Cat getObject() throws Exception {
        return new Cat();
    }

    @Override
    public Class<?> getObjectType() {
        return Cat.class;
    }
}

cat类、测试代码同上

实现BeanDefinitionRegistryPostProcessor接口

  • MyCatBeanRegistry类
@Component
public class MyCatBeanRegistry implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();
        rootBeanDefinition.setBeanClass(Cat.class);
        registry.registerBeanDefinition("cat",rootBeanDefinition);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {

    }
}

cat类、测试代码同上

实现ImportBeanDefinitionRegistrar接口

  • MyCatImportRegistrar类
@Component
public class MyCatImportRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();
        rootBeanDefinition.setBeanClass(Cat.class);
        registry.registerBeanDefinition("cat", rootBeanDefinition);
    }
}
  • 测试代码使用@Import导入MyCatImportRegistrar类
@RunWith(SpringRunner.class)
@SpringBootTest
@Import(MyCatImportRegistrar.class)
public class IocTest {

    @Autowired
    private Cat cat;

    @Test
    public void get() {
        System.out.println(cat.get());
    }
}

注解方式配置bean优缺点

优点

  • 使用简单
    不用编写xml定义,只需要在加入指定的注解
  • 开发效率高
  • 高内聚

缺点

  • 配置分散
  • 对象关系不清晰
  • 配置修改需要重新编译工程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值