关于Spring容器

Spring框架主要通过IOC和AOP实现对象管理和切面编程。它能自动扫描并创建对象,如使用@ComponentScan注解。此外,也可用@Bean注解自定义方法创建并管理对象。在选择创建对象方式时,通常非自定义类使用@Bean,自定义类则首选组件扫描。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单介绍Spring框架的作用

Spring框架主要解决了创建对象与管理对象的相关问题。其核心时IOC(控制反转)和AOP(面向切面),由于Spring框架回创建并管理许多对象,在使用的过程中,也可以通过Spring框架来获取这些对象,所以,Spring也被称为“Spring容器”,由Spring创建并且管理的每个对象,都可以称之为一个Soring Bean。


Spring框架创建对象两种方式

1、第一种组件扫描

配置类上添加@ComponentScan注解,表示开启组件扫描,示例代码如下:

@Configuration // 配置类注解
@ComponentScan // 表示开组件扫描
public class SpringConfiguration {}

当开启组件扫描后,Spring框架会自动扫描当前配置类所在的包,查找此包及其子孙包下的组件类,如果找到组件类,就会自动创建此类的对象!

在Spring Boot项目中,启动类都添加了@SpringBootApplication注解,此注解中就包含了@ComponentScan,并且,还包含@SpringBootConfiguration,而@SpringBootConfiguration中包含@Configuration,其关系大致是:

@SpringBootApplication
-- @ComponentScan
-- @SpringBootConfiguration
-- -- @Configuration

所以,在SpringBoot项目中启动类本身就是一个配置类,且开启了组件扫描。

仅当添加了@Component注解的类才会被视作为组件类例如:

@Component
public class ComponentDemo {}

在使用@ComponentScan时,也可以指定扫描的(若干个)包,例如:

@Configuration
@ComponentScan({
    "xx.xxxx.xxxxx.xxxxxxx.xxxxxxx",
    "xx.xxxx.xxxxx.xxxxxxx.xxxxxxx"
})
public class SpringConfiguration {}

以上做法可以使得组件扫描的范围更加精准,避免扫描到其它不需要创建对象的包,以节约组件扫描的耗时,但是,由于组件扫描的效率非常高,节约的耗时并不明显,并且,这些消耗是发生在启动项目的过程中的,启动项目的耗时一般都不必纠结。

Spring框架中,@Component注解的衍生注解还有:@Controller、@Service、@Repository、@Configuration。另外在在Spring MVC框架中,新增了更多的组件注解,例如:@RestController、@ControllerAdvice、@RestControllerAdvice

2、第二种@Bean方法

在配置类中,可以自定义方法返回你希望Spring创建并管理的对象,并在方法上添加@Bean注解,例如:

@Configuration
public class SpringConfiguration {
    
    @Bean // Spring框架自动调用,并获取返回的结果,接下来,Spring框架会管理所返回的结果
    public IAdminService adminService() {
        return new AdminServiceImpl();
    }
    
}

3、对于创建对象的方式的选取

在开发实践中,对于2种创建对象的方式的选取:

  • 如果是自定义的类,优先采取组件扫描的做法,因为更加简单、直接
  • 对于非自定义的类,只能采取@Bean注解的做法,因为你无法在非自定义的类上添加组件注解,就不可以使用组件扫描的做法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值