@Component和@Bean的区别

这两个注解的相同点是,他们都能完成创建实例,加入容器。但它们实现的方式差异很大。

@Component (@Controller @Service @Respository)作用于类class上,只有在我们的SpringBoot应用程序启用了组件扫描并且包含了被注解的类时才有效。通过组件扫描,Spring将扫描整个类路径,并将所有@Component注释类添加到Spring容器。

@Bean相对来说就更加灵活了,它可以独立加在方法method上,按需注册到spring容器。
而且如果你要用到第三方类库里面某个方法的时候,你就只能用@Bean把这个方法注册到spring容器,因为用@Component注解是要写在类中的。

=@Bean 的用法=
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名

定义bean
下面是@Configuration里的一个事务的例子

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }

}

这个配置就等同于之前在xml里的配置``

<beans>
    <bean id="transferService" class="cn.tedu.TransferServiceImpl"/>
</beans>

bean的依赖
@bean 也可以依赖其他任意数量的bean,如果TransferService 依赖 AccountRepository,我们可以通过方法参数实现这个依赖

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService(ProductRepository productRepository) {
        return new TransferServiceImpl(productRepository);
    }

}

@Controller和@RestController的区别

这两个注解都是用于SpringMVC框架,
早期使用JSP做页面展示时,习惯使用Controller注解,它返回的是SpringMVC框架提供的ModelAndView对象(简称Model对象)
而当今主流习惯的时控制层返回JSON,前台页面通过ajax提交Controller请求,然后获得JSON字符串响应,然后解析JSON,从中获取数据后在页面上展现。
显然这种方式优于早期只为JSP服务的方式,不仅兼容就的JSP方式,支持新的ajax方式,甚至能异构系统,前台是nodejs下的vue+elementui等。

说了半天怎么跟题目好像无关呢?别着急说清了背景,区别就出来了。
@Controller 适合早期JSP方式,它直接返回ModelAndView对象。
@RestController 适合现今大前端方式,如VUE,它返回JSON,vue对json解析,渲染到页面上。

*** @since 2.5**

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
*** @since 4.0**

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
为了兼容以前方式,RestController其实就是Controller,只是在Controller返回对象前,它干了件事情,通过注解标识@ResponseBody把返回的对象Object,转换成了JSON字符串。

这里注意@Controller返回也是java对象,但它本质是SpringMVC框架的ModelAndView对象;
而@RestController返回则是业务对象,或者统一的返回值对象 SysResult。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值