@Component和@Service、@Controller、@Repository区别

相同点:

    @Component为@Service、@Controller、@Repository的元注解,四个实现功能是一样的

不同点为区分业务层:

  1. @Component 业务特殊组件层,如handler类
  2. @Controller 业务控制层
  3. @Service 业务逻辑层
  4. @Repository 业务资源层

@Component用来做什么?

    被@Component标注的类被视为自动检测的候选者;

@Component何时用?

  • 在SpringBoot中使用@ComponentScan来自动检测定位指定包下的候选者,将扫描到的候选者进行解析载入(将用户定义好的Bean抽象为IOC内部的数据结构BeanDefinition,注入到HashMap对象中),然后通过BeanDefinitionRegistry接口将载入的BeanDefinition注册到IOC容器中。
  • Spring IOC设计时,Bean定义的定位载入注册和依赖注入两个独立的过程。依赖注入为应用第一次通过getBean向容器索取Bean的时候。或通过类注解@Lazy(false),使Bean的依赖注入再IOC的初始化时预先完成(自己项目中未使用,看源码得来的,有需要的时候需要试下)。

Spring-context 5.0.4源码

@Component

package org.springframework.stereotype;

@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.stereotype.Indexed  
public @interface Component {
    java.lang.String value() default "";
}

@Service

package org.springframework.stereotype;

@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
//@Component做为元注解
@org.springframework.stereotype.Component
public @interface Service {
    //此注解指定当前属性和父类的value属性关联绑定
    @org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Component.class)
    java.lang.String value() default "";
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值