SprngBoot配置文件、启动流程、Bean对象,ApplicationContext

一、SpringBoot配置文件加载的优先级

  1. 命令行参数具有最高的优先级,可以在应用启动时覆盖其他配置,--server.port=8080
  2. Java系统属性:程序内部通过System.setProperty()方法设置。
  3. 应用外部的带Profile的配置文件:(其中{profile}是激活的Profile名称),它们会在对应的Profile被激活时加载。
  4. 应用外部的不带Profile的配置文件
  5. 应用内部的带Profile的配置文件
  6. 应用内部的不带Profile的配置文件
  7. @Configuration注解类上的@PropertySource
  8. Spring Boot的特定加载顺序,bootstrap,application.yml
  9. 文件类型:在同一路径下,.properties文件的优先级高于.yml或.yaml文件。

二、SpringBoot的启动流程大概是什么?

        先会执行main中的run()方法,run方法中会有类似于spring的IOC初始化的操作,而IOC实际上就是利用了典型的模板方法模式,实际上调用了刷新的13个模板方法,而springboot在初始化的过程中,很明显,不会进行配置文件的初始化,而是注解初始化,此时会将当前java配置类的类对象传递进去,然后接下来就是使用自动装配的注解,这个注解会去加载spring.factories文件中的内容去进行候选,同时会通过spring-autoconfiguration-metadata.properties去进行筛选,剩下的会在返回的时候加入IOC容器中

三、怎么在SpringBoot启动后执行方法?

        1、使用@PostConstruct注解

@Component  
public class MyStartupRunner {  
  
    @PostConstruct  
    public void init() {  
        // 在这里执行你的初始化代码  
        System.out.println("使用@PostConstruct注解执行初始化");  
    }  
}

        2、实现CommandLineRunner或ApplicationRunner接口

四、Spring怎么装载自定义的Bean?

  1. 使用XML配置文件:在XML文件中定义Bean,然后在Spring Boot的主类中通过@ImportResource注解引入这些XML配置。
  2. 使用Java配置类:在Spring Boot中,更推荐使用Java配置类来定义Bean。你可以创建一个带有@Configuration注解的类,并在其中使用@Bean注解来定义Bean。
  3. 使用组件扫描:Spring Boot的默认行为是开启组件扫描的,它会扫描@SpringBootApplication注解所在的包及其子包下的类,并自动注册带有@Component、@Service、@Repository、@Controller等注解的类为Bean

五、Spring怎么控制Bean对象要不要加载?

        1、使用@Conditional注解

        使用@ConditionalOnClass来检查类路径下是否存在某个类,如果存在则加载Bean;

        使用@ConditionalOnMissingBean来检查容器中是否已存在某个Bean,如果不存在则加载Bean

        使用@ConditionalOnProperty来根据配置属性决定是否加载Bean

        2、ImportSelector接口

通过@Import注解引入一个选择器类,该选择器类可以实现根据特定条件来动态地选择一组Bean类名进行加载。这种方式在需要根据不同条件加载不同Bean集合时非常有用

        3、Profile

        @Profile注解本身不直接用于条件控制Bean的加载,但它允许开发者根据不同的环境(如开发、测试、生产)来激活或禁用一组Bean

六、Spring中FactoryBean和BeanFactory有什么关系?

        beanFactory 是所有 spring bean容器的顶级接口,为spring的容器定义了一套规范,并提供了像getbean这样的方法 从容器中获取指定的bean实例

        beanFactory在产生bean的同时,还提供了DI,用来解决bean之间依赖注入的能力

        FactroyBean 是一个工厂bean,是一个接口,动态去生成某一类型的bean的实例,可以自定义一个bean 去加载到IOC容器里面

七、Spring中注入ApplicationContext能干什么?

  1. 获取Bean:虽然直接注入所需的Bean是更常见的做法,但在某些情况下,你可能需要在运行时根据条件或配置动态地获取Bean。ApplicationContext允许你通过getBean(String name)getBean(Class<T> requiredType)方法获取Bean实例。

  2. 访问环境信息和配置文件ApplicationContext提供了对Spring环境(Environment)的访问,这使得你可以读取外部化配置(如属性文件、YAML文件或环境变量)中的值。这对于配置驱动的应用程序特别有用,因为它允许你根据环境(开发、测试、生产)或特定条件动态地调整应用程序的行为。

  3. 发布和监听事件ApplicationContext实现了ApplicationEventPublisher接口,允许你发布应用程序事件。这对于跨组件通信非常有用,特别是当你不希望组件之间有直接依赖时。同时,你可以通过实现ApplicationListener接口来监听这些事件,从而在事件发生时执行特定的逻辑。

  4. 加载资源ApplicationContext提供了对资源的访问,如文件、类路径资源等。这对于加载配置文件、图片或其他类型的资源特别有用。

  5. 支持AOP(面向切面编程):虽然AOP不是直接通过ApplicationContext实现的,但ApplicationContext是Spring AOP集成的基础。通过ApplicationContext,你可以轻松地注册和使用AOP切面,以实现对横切关注点(如日志、事务管理等)的模块化。

  6. 获取国际化消息ApplicationContext支持国际化,允许你根据用户的语言偏好返回不同语言的消息。这对于开发多语言应用程序非常有用。

  7. 集成Spring的其他模块:Spring提供了许多扩展模块,如Spring MVC、Spring Security等,它们都与ApplicationContext紧密集成。通过ApplicationContext,你可以轻松地集成这些模块,并利用它们提供的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值