题目
创建 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 能够扫描并创建被标记的类。