Spring中@Component与@Bean的异同及使用场景举例说明

相同点

注解@Component(@Repostory,@Service,@Controller同@Component效果一样,下文不再赘述)和@Bean一样会生成一个对象来被IOC容器管理,并且这两个注解都能为管理的bean指定name等属性。

不同点

  • @Component注解使用在类上。只适用于生成自己定义的类的对象;@Bean注解使用在方法上,所在类必须被@Configuration或@Component注解。可以生成自己定义的类或者其他工具包的对象。
  • @Component注解一般使用类的无参构造方法来生成对象给IOC容器管理。逻辑简单,但是不灵活,适用于业务逻辑简单的对象管理;@Bean注解使用注解方法的返回对象给IOC容器管理。需要自己定义该对象的生成逻辑,相对比较复杂,但是可以解决一些较为复杂的逻辑。

使用场景

上文给出了两种注解的相同点于不同点,但光看文字可能不是这么好理解,下面给出具体样例加以说明。

例1

@Controller(“myController”)
//@Componet 作用与@Controller相同
public class MyController() {

    //my Controller 

}

控制器这种bean生成逻辑简单,并且构造器不需要入参,使用Component注解简单方便。此案例也可以使用@Bean来实现,见下图,代码行数多,而且还多一个方法,复杂度比Component要高很多。

@Configuration 
//通常此注解被使用在配置相关的类中,不在本文的讨论范围,贪图方便将此注解用于此处。
//实际开发中请勿学习此做法。
public class MyController() {

    @Bean(name = "myController")
    public MyController genMyController() {
        return new MyController();
    }
    
    // my controller 

}

例2

@Configuration
//通常此注解被使用在配置相关的类中,不在本文的讨论范围,贪图方便将此注解用于此处。
//实际开发中请勿学习此做法。
public class SpringBean {

    private String id;

    @Bean
    public String genId(){
        return "aaa";
    }

    @Bean(name = "mySpringBean")
    public SpringBean genString(String id){//参数值从IOC容器中取
        if (null != id && !id.isEmpty()) {
        return new SpringBean(id);
        } else {
            return null;
        }
    }

    public SpringBean(String id) {
        super();
        this.id = id;
    }

}

这段代码中这个类根据容器中的String参数来生成目标对象或者不生成实例对象,只能使用@Bean注解来完成。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值