SpringBoot 创建对象常见的几种方式

SpringBoot 创建对象常见的几种方式

在 Spring Boot 中,将 Bean 对象添加到 IOC 容器中,通用的有下面几种方式:

  1. 使用 @Component@Service@Repository@Controller 注解
  2. 使用 @Configuration@Bean 注解
  3. 使用 @Import 注解导入其他配置类
  4. 通过 ApplicationContext 编程方式手动注册 Bean

1. 使用 @Component(或 @Service@Repository@Controller)注解

最常见的方式,Spring 会自动扫描并将带有这些注解的类注册为 Bean。

java 复制代码
import org.springframework.stereotype.Component;

@Component
public class User {
    public void say() {
        System.out.println("Hello User!");
    }
}

配置扫描路径 (通常在 @SpringBootApplication 上已经启用了扫描,如果需要指定包路径,可以使用 @ComponentScan 注解):

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

在 Spring Boot 启动时,@Component 注解的类会自动注册为 Bean,并添加到 IOC 容器中。

2. 使用 @Configuration@Bean 注解

通过在 @Configuration 注解的配置类中使用 @Bean 注解,可以手动将对象添加到 Spring 容器中。

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {

    @Bean
    public User user() {
        return new User();
    }
}

User 类

java 复制代码
public class user {
    public void say() {
         System.out.println("Hello User!");
    }
}

BeanConfig 类使用 @Bean 注解注册了一个 user 实例,Spring 会将其自动加入到 IOC 容器中。

3. 使用 @Import 注解导入配置类

@Import 注解可以导入其他配置类,将其配置的 Bean 添加到当前应用的 IOC 容器中。

java 复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(BeanConfig.class)
public class MainConfig {
    // 通过 @Import 导入 BeanConfig 中的 Bean
}

MainConfig 类通过 @Import(BeanConfig.class) 导入了 BeanConfig 中定义的所有 Bean,这样 MyBean 也会被注册到 IOC 容器中。

4. 使用 ApplicationContext 编程方式手动注册 Bean

在某些特殊的场景中,可能需要手动编程注册 Bean,这时可以使用 AnnotationConfigApplicationContextGenericWebApplicationContext 类。

java 复制代码
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class ManualBeanRegistration {

    public static void main(String[] args) {
        // 创建 Spring 容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

        // 注册配置类
        context.register(BeanConfig.class);

        // 启动容器
        context.refresh();

        // 获取并使用 Bean
        MyBean myBean = context.getBean(MyBean.class);
        myBean.printMessage();

        // 关闭容器
        context.close();
    }
}

通过 AnnotationConfigApplicationContext 显式地手动注册了 BeanConfig 配置类,并启动了 Spring 容器。

总结

  1. @Component 注解 (及其衍生注解 @Service@Repository@Controller)是最常用的方式,通过自动扫描自动将 Bean 注册到 IOC 容器中。
  2. @Configuration@Bean 注解 可以在配置类中手动注册 Bean。
  3. @Import 注解 可以将其他配置类中的 Bean 导入到当前配置类中。
  4. 手动注册 通过 ApplicationContext 等类可以编程方式注册 Bean。
相关推荐
葫芦和十三1 小时前
图解 MongoDB 04|索引模型:每建一个索引,就是在 B+-tree 森林里多栽一棵
后端·mongodb·agent
用户47949283569153 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端
GetcharZp5 小时前
告别 Nginx 复杂配置!这款带 Web 面板的万能代理神器,让端口转发变得如此简单
后端
IT_陈寒7 小时前
React的useState居然还有这种坑?我差点删库跑路
前端·人工智能·后端
nanxun8868 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
Pedantic8 小时前
SwiftUI 手势笔记
前端·后端
金銀銅鐵8 小时前
[Python] 从《千字文》中随机挑选汉字
后端·python
用户15630681035110 小时前
Day01 | Java 基础(Java SE)
java
飘尘11 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈