目录
前言
一、定义
那什么是Spring容器呢?
二、Bean的作用
1、组件管理
2、依赖注入
3、作用域管理
4、AOP支持
三、Bean的使用
1、声明Bean
2、使用Bean
后记
前言
在讲SpringBoot中的Bean之前,有必要先讲讲Spirng中的注解:
一类注解是用于注册 Bean
假如 IoC 容器是一间空屋子,首先这间空屋子啥都没有,我们要吃大餐,我们就要从外部搬运食材和餐具进来。这里把某一样食材或者某一样餐具搬进空屋子的操作就相当于每个注册 Bean 的注解作用类似。注册 Bean 的注解作用就是往 IoC容器中放(注册)东西!
用于注册 Bean 的注解:比如 @Component、@Repository、@Controller、@Service、@Configuration 这些注解就是用于注册 Bean,放进 IoC 容器中,一来交给 Spring 管理方便解耦,二来还可以进行二次使用,啥是二次使用呢?这里的二次使用可以理解为:在你开始从外部搬运食材和餐具进空屋子的时候,一次性搬运了猪肉、羊肉、铁勺、筷子四样东西,这个时候你要开始吃大餐,首先你吃东西的时候肯定要用筷子或者铁勺,别说你手抓,只要你需要,你就会去找,这个时候发现你已经把筷子或者铁勺放进了屋子,你就不同再去外部拿筷子进屋子了,意思就是 IoC 容器中已经存在,就可以直接拿去用,而不必再去注册!而拿屋子里已有的东西的操作就是下面要讲的关于使用 Bean 的注解!
一类注解是用于使用 Bean
用于使用Bean的注解:比如@Autowired , @Resource注解,这些注解就是把屋子里的东西自己拿来用,如果你要拿,前提一定是屋子(IOC)里有的,不然就会报错,比如你要做一道牛肉拼盘需要五头牛做原材料才行,你现在锅里只有四头牛,这个时候你知道,自己往屋子里搬过五头牛,这个时候就直接把屋子里的那头牛直接放进锅里,完成牛肉拼盘的组装。是的这些注解就是需要啥想要啥,只要容器中有就往容器中拿!而这些注解又有各自的区别,比如@Autowired用在筷子上,这筷子你可能只想用木质的,或许只想用铁质的,@Autowired作用在什么属性的筷子就那什么筷子,而@Resource如果用在安格斯牛肉上面,就指定要名字就是安格斯牛肉的牛肉。
一、定义
在SpringBoot中,Bean是一个由Spring容器管理的对象。它是应用程序中的一个基本的构建,代表了一个可重用的组件,通常是业务逻辑、数据访问或其他功能模块。
那什么是Spring容器呢?
Spring 容器是 Spring 框架的核心部分,负责管理应用程序中的对象(即 Bean)的生命周期和依赖关系。它提供了一种方式来创建、配置和管理这些对象,从而实现松耦合和高内聚的设计。
二、Bean的作用
1、组件管理
Bean是Spring容器管理的基本单位。通过将类标记为Bean,Spring可以自动管理这些对象的生命周期,包括创建、初始化和销毁。这使得我们可以专注于业务逻辑,而不是关心对象的管理细节。
@Component
public class UserService {
public void registerUser(String username) {
System.out.println("User " + username + " registered.");
}
}
在这个例子中,@Component 注解将UserService声明为一个Spring Bean,这意味着当Spring容器启动时,它会自动扫描到这个类并创建一个实例,而这个实例会被纳入Spring的应用上下文中,允许其他组件通过依赖注入使用它,或者让Spring直接管理其生命周期。
2、依赖注入
Bean 使得依赖注入(Dpendency Injection)成为可能。通过将一个Bean注入到另一个Bean,Spring能够实现松耦合的设计,使得组件之间的依赖关系更加清晰。
@Component
public class MyController {
@Autowired
private MyService myService;
public void execute() {
myService.doSomething();
}
}
依赖关系:
MyController 类依赖于 MyService。控制器需要调用 MyService 提供的方法来执行业务逻辑。 依赖注入的实现:
使用了 @Autowired 注解来标识 myService 字段。这意味着 Spring 会自动为该字段注入一个 MyService 类型的实例。Spring 容器会在启动时扫描并创建所需的 bean,并将与 myService 类型匹配的 bean 注入到 MyController 的实例中。
3、作用域管理
Spring Bean 支持多种作用域(如单例、原型、请求、会话等),允许开发者根据实际需求选择适当的 Bean 生命周期。这有助于优化内存使用和资源管理。
4、AOP支持
通过将 Bean 与切面编程结合,Spring 可以在方法执行前后插入自定义逻辑,如日志记录、事务管理等。这使得开发者可以在不修改业务逻辑代码的情况下增强功能。
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore() {
System.out.println("A method in the service package is about to be called");
}
}
在这个例子中,LoggingAspect 是一个切面,用于在调用服务层方法之前记录日志。这种方式不需要修改业务逻辑代码。
三、Bean的使用
Bean的使用步骤主要:声明Bean→使用Bean
1、声明Bean
在使用Bean对象之前,我们需要提前声明Bean,常见声明Bean的方式有3种:
(1)XML配置(比较旧,不常用)
通过 XML 文件定义 Bean。在 applicationContext.xml 或其他配置文件中,使用
(2)注解配置(非常常用,常用定义自己在项目中定义的类)
使用注解来定义 Bean,常见的注解包括:
@Component:用于标记一个类为 Spring 管理的组件。@Service:用于标记服务层的组件。@Repository:用于标记数据访问层的组件。@Controller:用于标记控制器层的组件。
@Service // 使用Service注解来声明MyService为Bean对象,交给IoC容器管理
public class MyService {
// ...
}
(3)Java 配置类(常用于定义不是自己在项目主动创建的类,而是来自第三方引入的类)
如果要管理的bean对象来自于第三方,是无法用@Component及衍生注解声明beand ,就需要用到@Bean注解。@Bean可以声明在启动类中,但不建议这样做,一般来说,我们将@Bean声明在配置类中,使用 @Configuration 注解的类来定义 Bean,通过方法使用 @Bean 注解标记。
2、使用Bean
(1)XML配置方式 在需要使用 myService 的地方,通常通过 ApplicationContext 获取该 Bean。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyService myService = (MyService) context.getBean("myService");
myService.doSomething();
(2)注解配置方式 对于注解配置的 Bean,可以通过 @Autowired 注入,当你使用 @Autowired 时,Spring 会自动为你的字段或构造函数注入相应的 Bean,即自动装配。
@Controller
public class MyController {
@Autowired
private MyService myService;
public void handleRequest() {
myService.doSomething();
}
}
(3)Java配置类 通过 AnnotationConfigApplicationContext 获取 Bean。
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = context.getBean(MyService.class);
myService.doSomething();
后记
参考文档:大白话讲解Spring的@bean注解-CSDN博客
作者初学Java,若有什么错误,欢迎指正!😁