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 的 Bean
private 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 就能轻松使用它们!