Spring 5.X基础
IOC容器
Spring的核心是IOC容器,它可以管理容器内的普通Java对象以及对象之间的关系的绑定。容器中被管理的对象称为Bean。
Spring是通过元数据和POJO来定义管理Bean的。
- POJO:简单的Java对象。
- 元数据:描述如何管理POJO的数据。
Spring通过读取元数据知道如何管理你的POJO,然后按照你的要求对POJO进行管理。在早期,Spring的元数据主要是由XML实现的;现在,主要的元数据都是通过注解配置和Java配置实现的。
Spring的IOC容器是ApplicationContext,它拥有一个父接口BeanFactory,用来提供管理配置任意对象的基础功能。只要新建一个ApplicationContext的实现,就拥有一个Spring的IOC容器。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("context.xml");
Springboot可以在不同的环境下自动创建正确的IOC容器。
- AnnotationConfigApplicationContext:默认创建的IOC容器。
- AnnotationConfigServletWebServerApplicationContext:在Web应用下创建的IOC容器。
- AnnotationConfigReactiveWebServerApplicationContext:在响应式Web应用下创建的IOC容器。
Spring Bean的配置
注解配置(@Component)
当类注解为@Component、@Service、@Respository或@Controller时,Spring容器会自动扫描,并将它们注册成受容器管理的Bean。
@Component和@Service如果在没有显示Bean命名的情况下,Spring容器会自动命名为类名的第一个字母的小写形式。一般来说,没有必要去修改Bean的名称,使用默认的Bean名即可。当然,也可以通过@Component("***")来设置Bean的名称。
Java配置(@Configuration和@Bean)
在类上注解@Configuration(@Component的特例,会被容器自动扫描),可使类成为配置类。如果使用@Bean标注在类的方法上,则该方法的返回值即为Bean的实例。
Bean的生命周期
1、初始化和销毁
(1)、注解配置:使用@PostConstruct和@PreDestory
(2)、Java配置:使用@Bean的initMethod和destroyMethod。
2、延迟初始化(@Lazy)
只要在Bean上注解了@Lazy,那么Bean在被调用时就会被初始化。它可以和@Component类注解或@Bean一起使用。
3、依赖顺序(@DependsOn)
应用环境
Spring提供了一个接口Environment来代表当前运行的应用环境,这个环境包含两部分。
- Profile:一组命名的、定义在一起的Bean。通常为不同的应用场景(生产环境、开发环境、测试环境等)定义。
- Property:配置属性,可以从properties文件、JVM系统属性、操作系统环境变量等外部来获得配置属性。
条件配置(@Conditional)
通过@Conditional我们可以定义当满足特定的条件时,应该做什么配置。
@Conditional注解接收Condition数组作为参数,Condition即我们的特定的条件。Condition只有一个方法matches,当符合条件时,返回true;当不符合条件时,返回false。
开始配置(@Enable*和@Import)
@Enable*的开启配置的功能依赖于@Import注解,@Import注解支持导入如下配置:
- 直接导入@Configuration配置类。
- 配置类选择器ImportSelector的实现。
- 动态注册器ImportBeanDefinationRegistrar的实现。
- 混合以上三种。