题目
创建 Spring Bean 的方法有哪些
答案
@[toc]
---
## 使用构造函数创建 Bean
可以通过在配置类中使用 `@Bean` 注解,并提供相应的构造函数参数,来创建 Bean 实例。示例代码如下:
```java
@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean(); // 使用默认的无参构造函数创建 Bean 实例
}
@Bean
public AnotherBean anotherBean() {
return new AnotherBean(myBean()); // 通过构造函数注入依赖的 Bean
}
}
```
## 使用静态工厂方法创建 Bean
可以通过在配置类中使用 `@Bean` 注解,并提供一个工厂方法(静态工厂方法)来创建 Bean 实例。示例代码如下:
```java
@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return MyBeanFactory.createMyBean(); // 调用工厂方法创建 Bean 实例
}
}
public class MyBeanFactory {
public static MyBean createMyBean() {
return new MyBean(); // 工厂方法创建 Bean 实例
}
}
```
## 使用实例工厂方法创建 Bean
如果 Bean 的创建依赖于其他 Bean 实例,可以使用实例工厂方法创建 Bean。示例代码如下:
```java
@Configuration
public class MyConfiguration {
@Bean
public MyBeanFactory myBeanFactory() {
return new MyBeanFactory(); // 实例工厂方法
}
@Bean
public MyBean myBean() {
return myBeanFactory().createMyBean(); // 调用实例工厂方法创建 Bean 实例
}
}
public class MyBeanFactory {
public MyBean createMyBean() {
return new MyBean(); // 实例工厂方法创建 Bean 实例
}
}
```
## 使用注解方式创建 Bean
可以使用 `@Component` 注解或其衍生注解(`@Service`、`@Repository`、`@Controller`)标记类,并让 Spring 自动扫描并创建 Bean 实例:
- `@Component` :通用的注解,可标注任意类为 `Spring` 组件。如果一个 Bean 不知道属于哪个层,可以使用`@Component` 注解标注。
- `@Repository` : 对应持久层即 Dao 层,主要用于数据库相关操作。
- `@Service` : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
- `@Controller` : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面
这些注解的作用完全一样,只不过方便标注在不同层
示例代码如下:
```java
@Component
public class MyBean {
// Bean 的实现
}
```
在 Spring 的配置文件中,需要配置组件扫描的基础包,以便 Spring 能够扫描并创建被标记的类。
