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,这时可以使用 AnnotationConfigApplicationContext 或 GenericWebApplicationContext 类。

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。
相关推荐
ServBay9 小时前
Claude Fable 5.5 测试曝光,但它在悄悄给你打分
后端·ai编程·claude
AI源码9 小时前
旅游推荐管理系统
spring boot
w_zero_one10 小时前
递归算法(一)
java·开发语言·算法
IT规划师10 小时前
一文讲透五种发布机制:滚动、蓝绿、金丝雀、红黑与 AB
后端·面试
SL_staff10 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华11 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊11 小时前
LeetCode1881~1990题目解析
java·leetcode
一条Go11 小时前
两套权限目录,三重闸门:Alioth 的多租户 RBAC 为什么这么拧
后端·程序员·github
Tokenfree11 小时前
把多模态 OCR 接进业务系统:四千张运单,三个坑
后端
十碗饭吃不饱11 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络