首页 > 其他分享 >Spring学习笔记_10-@Component

Spring学习笔记_10-@Component

时间:2024-10-25 17:20:53浏览次数:3  
标签:10 Service Spring DAO Component Controller Plus MyBatis

@Component

1. 介绍

在项目开发过程中,我们自己编写的类如果想注入到Spring中,由Spring来管理Bean的生命周期,就可以使用@Component注解将其注入到IOC容器中。

@Component注解还有三个衍生注解,那就是@Repository、@Service和@Controller注解,并且衍生出的注解通常会在使用MVC架构开发项目时,标注到MVC架构的分层类上。

比如:@Repository通常会被标注到表示dao层的类上,@Service注解通常会被标注到表示Service层的类上,而@Controller注解通常会被标注到表示Controller层的类上。

2. 场景

在Spring开发项目的过程中,如果需要将自己创建的类注入到IOC容器中,就可以使用@Component注解,也可以使用@Repository、@Service和@Controller注解。

其中,@Component注解一般会被标注到非三层(非MVC架构)类上,而@Repository、@Service和@Controller注解通常会被标注到三层架构的类上。并且@Repository通常会被标注到表示dao层的类上,@Service注解通常会被标注到表示Service层的类上,而@Controller注解通常会被标注到表示Controller层的类上。

3. 源码

3.1 @Component源码
/**
 * @author Mark Fisher
 * @since 2.5
 * @see Repository
 * @see Service
 * @see Controller
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {
        // 用于指定注入容器时Bean的id。如果没有指定Bean的id,默认值为当前类的名称
	String value() default "";
}
3.2 @Repository源码
/**
 * @author Rod Johnson
 * @author Juergen Hoeller
 * @since 2.0
 * @see Component
 * @see Service
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
	@AliasFor(annotation = Component.class)
	String value() default "";
}
3.3 @Service源码
/**
 * @author Juergen Hoeller
 * @since 2.5
 * @see Component
 * @see Repository
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
	@AliasFor(annotation = Component.class)
	String value() default "";

}
3.4 @Controller源码
/**
 * @author Arjen Poutsma
 * @author Juergen Hoeller
 * @since 2.5
 * @see Component
 * @see org.springframework.web.bind.annotation.RequestMapping
 * @see org.springframework.context.annotation.ClassPathBeanDefinitionScanner
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
	@AliasFor(annotation = Component.class)
	String value() default "";
}

4. 补充

4.1 DAO && Service && Controller
DAO层 (Data Access Object)
  • 定义:DAO层是专门用来处理数据访问的对象层。它的主要任务是从数据库获取数据、向数据库保存数据等操作。
  • 职责
  • 封装了底层的数据存取逻辑。
  • 提供了一种抽象方式来访问数据库中的数据,而不需要暴露具体的实现细节给上层服务。
  • 通常会包含CRUD(创建(Create)、读取(Retrieve)、更新(Update)、删除(Delete))操作。
  • 优点:提高了程序的可移植性和可测试性,通过更换不同的DAO实现即可支持多种数据库类型。
Service层
  • 定义:服务层位于业务逻辑的核心,负责处理应用程序的主要业务逻辑。
  • 职责
  • 实现业务规则。
  • 可能涉及调用多个DAO层方法完成复杂的事务处理。
  • 对于一些跨领域的需求,如日志记录、安全控制等,也可能在这里实现。
  • 特点:保持业务逻辑与用户界面以及数据访问机制之间的隔离,使得逻辑更加清晰且易于修改。
Controller层
  • 定义:控制器层作为前端请求的第一接触点,负责接收用户的输入,并根据这些输入决定调用哪个模型或服务来进行相应的处理。
  • 职责
  • 处理HTTP请求并返回适当的响应。
  • 调用适当的服务层方法执行业务逻辑。
  • 根据业务逻辑的结果准备数据模型,并选择正确的视图模板进行渲染。
  • 作用:充当客户端与服务器端其他部分之间的桥梁,确保只有合法的请求被转发到下一层处理。

在典型的分层结构中,一个请求可能首先到达Controller层,然后该层可能会调用Service层的方法来处理具体的业务逻辑。Service层可能会直接与DAO层交互,以便从数据库获取所需的数据或者保存更改。这样的设计使得各层之间相互独立,有利于软件开发过程中的模块化管理和后期维护。

4.2 Mybatis-Plus中的Mapper

在MyBatis-Plus框架中,Mapper接口实际上扮演了类似于传统意义上的DAO(Data Access Object)层的角色。MyBatis-Plus是对MyBatis的一个增强工具包,在简化开发、提高效率的同时保持了MyBatis原有的强大功能。以下是关于MyBatis-Plus中的Mapper与传统的DAO层之间关系的一些关键点:

  1. 定义和角色
  • 在MyBatis-Plus里,Mapper是直接面向数据库操作的接口。通过继承BaseMapper接口或使用注解的方式,可以快速地创建一个能够进行基本CRUD操作的数据访问对象。
  • 传统的DAO层同样是为了封装数据持久化逻辑而存在的,它通常包括了针对特定实体类的一系列数据库操作方法。
  1. 实现方式
  • MyBatis-Plus的Mapper利用了MyBatis提供的动态SQL支持,并结合了一些内置的优化措施来简化代码编写。开发者可以通过简单的配置或者继承BaseMapper来获得强大的数据访问能力。
  • 传统的DAO层可能需要手动编写更多的SQL语句以及处理结果集转换等细节工作,虽然更加灵活但也相对繁琐一些。
  1. 功能对比
  • MyBatis-Plus的Mapper提供了很多开箱即用的功能,比如分页查询、条件构造器等,这些都可以极大地减少开发者的工作量。
  • DAO层则往往需要开发者自行实现所有所需的操作,这给定制化带来了更高的自由度,但同时也意味着更多的时间成本。
  1. 整合进应用架构
  • 使用MyBatis-Plus时,Mapper可以直接被Service层调用来执行具体的数据库操作。这种情况下,Mapper就承担起了原本DAO层的责任。
  • 如果你的项目已经存在明确划分出的DAO层,那么也可以选择让DAO层内部使用MyBatis-Plus的Mapper来进行数据访问,这样既保留了原有架构的优点,又享受到了MyBatis-Plus带来的便利。

总结来说,MyBatis-Plus中的Mapper可以视为一种更为现代、高效的DAO实现形式。对于大多数应用场景而言,直接使用Mapper作为数据访问层已经足够满足需求;但在某些特殊场景下,你仍然可以选择在Mapper之上构建额外的DAO层以提供更复杂的业务逻辑封装。无论如何,合理利用MyBatis-Plus所提供的特性都能够帮助简化开发过程并提升工作效率。

标签:10,Service,Spring,DAO,Component,Controller,Plus,MyBatis
From: https://blog.csdn.net/LuckyLay/article/details/143239621

相关文章

  • Spring学习笔记_09——Environment
    Environment1.介绍Spring框架中的Environment是一个非常重要的概念,它提供了访问当前运行环境配置的API。Environment是一个接口,它包含了多个方法,用于获取配置参数、设置默认配置源、激活特定的配置文件等。在Spring应用中,Environment实例通常被注入到需要访问配置信息的......
  • 10款超好用的CAD图纸加密软件排行揭秘,2024年企业CAD图纸加密强力推荐
    在现代企业中,CAD图纸作为重要的设计资产,涉及大量的敏感信息。确保这些图纸的安全性是每个企业的首要任务。以下是2024年10款好用的图纸加密软件推荐,帮助企业有效保护其CAD图纸的安全。1.域智盾软件域智盾是一款专为企业用户设计的图纸加密软件,支持多种CAD文件格式的加密。......
  • 108th 2024/10/24 模拟赛总结64
    CSP赛前模拟直接搬了梦熊挺逆天的,T3随便能水分T1光速切,T2看了两眼看出了DP,主要原因是最近一直都在练习DP嘛,然后就写写写,写完36分DP写性质,结果还挂了8分,因为A性质打太快忘记更新了。。逆天,这都能过大样例,出题人是故意给的水样例,建议处刑52分???DP写出来了,思路完全对上了,贪心策略正......
  • 【芯智雲城】Amiccom笙科电子A8105BLE、Sub1G无线方案
    一、方案描述:A8105是一它是一个蓝牙智能IC。该设备集成了高速管道8051单片机,32KBytes系统内可编程闪存,256字节内部数据RAM,2KBytes外部数据RAM,拥有各种领先的2.4GHzFSK/GFSK射频收发器的功能和卓越的性能,可支持低能耗蓝牙外围模式(蓝牙5.0单点模式)。Sub1G的芯片以A9101为例,......
  • SpringJpa事务和缓存
    背景,一个service,有一个方法serviceA里面调用两个update方法,一个findByName方法。其中serviceA和update方法上都上有@transactional注解,而findByName上没有。示例如下:servcieA{updateByName()updateById()findByName()}先说结论,这个时候具体事务的变化如下:serviceA本身会......
  • 基于springboot+vue实现的房产信息管理系统(源码+L文+ppt)4-101
     基于springboot+vue实现的房产信息管理系统(源码+L文+ppt)4-1014.1功能模块设计房产信息管理系统根据权限类型进行分类,主要可分为用户端和管理员端两大模块。用户端模块主要实现了作物图谱,病虫害科普等操作,加强了用户的操作体验。管理员服务端模块主要根据管理员对整个系统......
  • 10款具备强大数据报告功能的电脑监控工具,办公电脑怎么监控
    数据报告功能是电脑监控软件的重要特性,它能够帮助管理者全面了解员工的工作行为、应用使用情况,并生成详细的生产力分析报告。以下是10款具备强大数据报告功能的监控工具推荐,帮助企业有效管理和提升工作效率。1.固信软件固信软件不仅是一款集成数据加密和屏幕监控的软件,还以......
  • 基于springboot+vue实现的老年人健康管理系统 (源码+L文+ppt)4-100
      基于springboot+vue实现的老年人健康管理系统(源码+L文+ppt)4-100摘   要随着人口老龄化的不断加剧,老年人健康管理成为社会关注的焦点之一。本论文旨在设计和开发一款基于SpringBoot框架的老年人健康管理系统,以提升老年人的健康管理效率和质量。该系统通过整合各种......
  • 基于springboot+vue实现的房产信息管理系统(源码+L文+ppt)4-101
     基于springboot+vue实现的房产信息管理系统(源码+L文+ppt)4-1014.1功能模块设计房产信息管理系统根据权限类型进行分类,主要可分为用户端和管理员端两大模块。用户端模块主要实现了作物图谱,病虫害科普等操作,加强了用户的操作体验。管理员服务端模块主要根据管理员对整个系统......
  • 基于springboot+vue实现的老年人健康管理系统 (源码+L文+ppt)4-100
      基于springboot+vue实现的老年人健康管理系统(源码+L文+ppt)4-100摘   要随着人口老龄化的不断加剧,老年人健康管理成为社会关注的焦点之一。本论文旨在设计和开发一款基于SpringBoot框架的老年人健康管理系统,以提升老年人的健康管理效率和质量。该系统通过整合各种......