简单介绍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注解的类才会被视作为组件类例如:
@Componentpublic 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注解,例如:
@Configurationpublic class SpringConfiguration { @Bean // Spring框架自动调用,并获取返回的结果,接下来,Spring框架会管理所返回的结果 public IAdminService adminService() { return new AdminServiceImpl(); } }
3、对于创建对象的方式的选取
在开发实践中,对于2种创建对象的方式的选取:
- 如果是自定义的类,优先采取组件扫描的做法,因为更加简单、直接
- 对于非自定义的类,只能采取@Bean注解的做法,因为你无法在非自定义的类上添加组件注解,就不可以使用组件扫描的做法