Spring常见注解作用用法详解

1. @Component,@Repository,@Controller,@Service

@Repository,@Controller,@Service这三个作用大致相同,都是把对象交给spring管理,在spring中创建实例,至于区别,@Service写在业务层,@Controller写在Controller层,@Repository写在持久层.这三个注解可以说是@Component注解的语义细分,分别在不同场景使用,因此你会看到在持久层写@Repository或者@Component都是可以的,如下:

//@Component 
@Repository//两个注解选其一,均正确
public interface ClassMapper {

    /**
     * 查询所有班级信息
     * @return
     */
    List<Class> selectAllClass();
    }

2. @Mapper

@Mapper
@Repository
public interface ClassMapper {

    /**
     * 查询所有班级信息
     * @return
     */
    List<Class> selectAllClass();
    }

以上是持久层的一段代码,你可能会有疑问,@Repository(@Component)实现的是自动装配,那么@Mapper是干嘛的呢?这里要说明一点,@Mapper是Mybatis的注解,和 Spring 没有关系,@Repository (@Component)是 Spring 的注解,用于声明 Bean。@Mapper有将dao接口和mapper.xml配置文件建立映射的作用,因此,@Mapper 一定要有,否则Mybatis 找不到 mapper,@Repository 可有可无,可以消去依赖注入的报错信息。

@Mapper//只写@Mapper是可以运行的
public interface ClassMapper {

    /**
     * 查询所有班级信息
     * @return
     */
    List<Class> selectAllClass();
    }

此外,@MapperScan 可以替代 @Mapper。

3. 注解写在接口层,还是实现类?
先说结论,持久层只有接口,注解写在接口上即可,而业务层的注解写在实现类,@Service注解是标注在实现类上的,因为@Service是把spring容器中的bean进行实例化,也就是等同于new操作,只有实现类是可以进行new实例化的,而接口则不能,所以是加在实现类上的。

4. @AutoWired,@Resource
@AutoWrite by Type在spring中bean并自动装配,即在spring容器中按类型匹配(必须是存在的,即实例化过的,否则会报空指针异常,如果要允许null值,可以设置它的required属性为false),@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。
@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

    @Autowired
    TeacherService teacherService;//创建service实体
    @Autowired
    private Student student;//创建对象实体
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acerola-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值