当前位置: 首页 > news >正文

JAVA学习笔记038——bean的概念和常见注解标注

什么是bean?

Bean 就是 被 Spring 管理的对象,就像工厂流水线上生产的“标准产品”。这些对象不是你自己 new 出来的,而是由 Spring 容器(一个超级工厂)帮你创建、组装、管理。

由 @Component、@Service、@Controller 等注解标记的类,都会变成 Spring 管理的 Bean。这些注解就像是给类贴了一个标签,告诉 Spring:“嘿,这个类交给你了,帮我管理它!”

这些注解的作用

@Component:

最通用的注解,标记一个类为 Bean。

比如:

@Component
public class MyComponent {// 这是一个普通的 Bean
}

@Service:

专门用于标记业务逻辑层的类。

比如:

@Service
public class UserService {// 这是一个业务逻辑 Bean
}

@Controller:

专门用于标记控制器层的类(通常用于处理 HTTP 请求)。

比如:

@Controller
public class UserController {// 这是一个控制器 Bean
}

@Repository:

专门用于标记数据访问层的类(通常用于操作数据库)。

比如:

@Repository
public class UserRepository {// 这是一个数据访问 Bean
}

为什么分这么多注解?

虽然这些注解的功能本质上是一样的(都是把类变成 Bean),但它们有语义化的作用:

让代码更清晰:看到 @Service 就知道这是业务逻辑,看到 @Controller 就知道这是处理请求的。

方便扩展:未来 Spring 可能会根据注解类型提供特定的功能(比如 @Repository 会处理数据库异常)。

Bean 的创建过程

扫描:Spring 启动时,会扫描所有被 @Component、@Service、@Controller、@Repository 标记的类。

实例化:Spring 会创建这些类的对象(即 Bean)。

管理:把这些 Bean 放到 Spring 容器中,供其他地方使用。

举个完整的例子

// 1. 定义一个服务类(标记为 Bean)
@Service
public class UserService {public String getUserName() {return "张三";}
}// 2. 定义一个控制器类(标记为 Bean)
@Controller
public class UserController {@Autowired // 自动注入 UserService 的 Beanprivate UserService userService;public void showUserName() {String name = userService.getUserName();System.out.println("用户名:" + name);}
}

运行逻辑:

Spring 扫描到 UserService 和 UserController,把它们变成 Bean。

Spring 发现 UserController 需要 UserService,于是自动把 UserService 的 Bean 注入到 UserController 中。

你可以直接使用 UserController,而不用手动创建 UserService。

总结

被 @Component、@Service、@Controller、@Repository 标记的类,都会变成 Bean。

区别:这些注解主要是为了区分 Bean 的用途,让代码更清晰。

核心:Spring 会自动管理这些 Bean 的生命周期和依赖关系,你只需要用 @Autowired 就能轻松使用它们!

http://www.lryc.cn/news/545159.html

相关文章:

  • 自然语言处理NLP入门 -- 第十节NLP 实战项目 2: 简单的聊天机器人
  • 【网络安全 | 渗透工具】小程序反编译分析源码 | 图文教程
  • uniapp 系统学习,从入门到实战(六)—— 样式与布局
  • ‘ts-node‘ 不是内部或外部命令,也不是可运行的程序
  • mysql 全方位安装教程
  • 22-接雨水
  • 使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成
  • leetcode28 找出字符串第一个匹配值的下标 KMP算法
  • 【Bug】natten:安装报错(临近注意力机制的高效cuda内核实现)
  • AI 实战2 - face -detect
  • Spring Boot 项目开发流程全解析
  • 从Java到MySQL8源码:深入解析PreparedStatement参数绑定与执行机制
  • mysql的主从同步
  • 工程化与框架系列(10)--微前端架构
  • 【3天快速入门WPF】11-附加属性
  • MySQL并发知识(面试高频)
  • 现存脑容知识库
  • Mysql-如何理解事务?
  • dify绑定飞书多维表格
  • QT播放视频保持视频宽高比消除黑边
  • 1. IO的基础知识
  • 科普:ROC AUC与PR AUC
  • Vue3父组件访问子组件方法与属性完全指南
  • AI时代保护自己的隐私
  • Android APK组成编译打包流程详解
  • TCP长连接与短连接
  • C#委托(delegate)的常用方式
  • C#从入门到精通(35)—如何防止winform程序因为误操作被关闭
  • docker本地镜像源搭建
  • Sqlserver安全篇之_TLS的证书概念