考研后SpringBoot复习2—容器底层相关注解

考研后SpringBoot复习2

SpringBoot底层注解学习

与容器功能相关的注解与springboot的底层原理密切相关

组件添加注解@configuration

Spring Ioc容器部分回顾

包括在配置中注册,开启包扫描和注解驱动开发等需要在进行重新的学习回顾

实例

package com.dzu.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * 主程序类
 * @Author ChenRuXu
 * @Date 2023/12/30 16:22
 * @Version 1.0
 */
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        //返回所有容器的名字
        String[] beanDefinitionNames = run.getBeanDefinitionNames();
        //遍历输出
        for (String name:beanDefinitionNames){
            System.out.println(name);
        }
    }
}

使用@controller注解和@Configuration 和@Bean注解可以将组价注册到Spring容器中
考研后SpringBoot复习2—容器底层相关注解_第1张图片

proxyBeanMethods:代理bean的方法

  •  Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
    
  •  Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
    
  •  组件依赖必须使用Full模式默认。其他默认是否Lite模式
    
  • 最佳实战
    • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
    • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

组件导入注解@Import

//给容器中自动创建这两个类型的组件
@Import({User.class, DBHelper.class})

实例验证@bean与@import导入的不同

package com.dzu.boot;

import ch.qos.logback.core.db.DBHelper;
import com.dzu.boot.bean.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * 主程序类
 * @Author ChenRuXu
 * @Date 2023/12/30 16:22
 * @Version 1.0
 */
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        //返回所有容器的名字
        String[] beanDefinitionNames = run.getBeanDefinitionNames();
        //遍历输出
        for (String name:beanDefinitionNames){
            System.out.println(name);
        }

        //获取组件
        String[] beanNamesForType = run.getBeanNamesForType(User.class);
        System.out.println("==========");
        for (String s:beanNamesForType){
            System.out.println(s);
        }

        DBHelper bean1 = run.getBean(DBHelper.class);
        System.out.println(bean1);
    }
}

全类名为import导入,而方法名相关的为@bean导入Spring容器中的
考研后SpringBoot复习2—容器底层相关注解_第2张图片

条件装配注解@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

找到@conditional注解之后使用Ctrl+H打开继承树查看其对应的派生注解对应不同的功能(根据不同的条件进行判断

考研后SpringBoot复习2—容器底层相关注解_第3张图片

条件装配实例测试

=====================测试条件装配==========================
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
//@ConditionalOnBean(name = "tom")
@ConditionalOnMissingBean(name = "tom")
public class MyConfig {


    /**
     * Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */

    @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user组件依赖了Pet组件
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom22")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

public static void main(String[] args) {
        //1、返回我们IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

        //2、查看容器里面的组件
        String[] names = run.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }

        boolean tom = run.containsBean("tom");
        System.out.println("容器中Tom组件:"+tom);

        boolean user01 = run.containsBean("user01");
        System.out.println("容器中user01组件:"+user01);

        boolean tom22 = run.containsBean("tom22");
        System.out.println("容器中tom22组件:"+tom22);


    }

原生配置文件引入注解@ImportResource

作用将xml文件导入到Spring容器中

  1. 在resource下面编写xml文件(类似Spring的配置文件)
?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="haha" class="com.atguigu.boot.bean.User">
        <property name="name" value="zhangsan">property>
        <property name="age" value="18">property>
    bean>

    <bean id="hehe" class="com.atguigu.boot.bean.Pet">
        <property name="name" value="tomcat">property>
    bean>
beans>
  1. 通过注解将配置文件中的实例注入到spring容器中
@ImportResource("classpath:beans.xml")
public class MyConfig {}

======================测试=================
        boolean haha = run.containsBean("haha");
        boolean hehe = run.containsBean("hehe");
        System.out.println("haha:"+haha);//true
        System.out.println("hehe:"+hehe);//true

之后复习springboot自动配合相关的原理

你可能感兴趣的:(java,微服务,spring,boot,后端,java)