SpringBoot 创建对象常见的几种方式
在 Spring Boot 中,将 Bean 对象添加到 IOC 容器中,通用的有下面几种方式:
- 使用
@Component
、@Service
、@Repository
或@Controller
注解 - 使用
@Configuration
和@Bean
注解 - 使用
@Import
注解导入其他配置类 - 通过
ApplicationContext
编程方式手动注册 Bean
1. 使用 @Component
(或 @Service
、@Repository
、@Controller
)注解
最常见的方式,Spring 会自动扫描并将带有这些注解的类注册为 Bean。
import org.springframework.stereotype.Component;
@Component
public class User {
public void say() {
System.out.println("Hello User!");
}
}
配置扫描路径(通常在 @SpringBootApplication
上已经启用了扫描,如果需要指定包路径,可以使用 @ComponentScan
注解):
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 容器中。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean
public User user() {
return new User();
}
}
User 类:
public class user {
public void say() {
System.out.println("Hello User!");
}
}
BeanConfig
类使用 @Bean
注解注册了一个 user
实例,Spring 会将其自动加入到 IOC 容器中。
3. 使用 @Import
注解导入配置类
@Import
注解可以导入其他配置类,将其配置的 Bean 添加到当前应用的 IOC 容器中。
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
类。
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 容器。
总结
@Component
注解(及其衍生注解@Service
、@Repository
、@Controller
)是最常用的方式,通过自动扫描自动将 Bean 注册到 IOC 容器中。@Configuration
和@Bean
注解 可以在配置类中手动注册 Bean。@Import
注解 可以将其他配置类中的 Bean 导入到当前配置类中。- 手动注册 通过
ApplicationContext
等类可以编程方式注册 Bean。