iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot底层注解超详细介绍
  • 299
分享到

SpringBoot底层注解超详细介绍

2024-04-02 19:04:59 299人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1. @Configuration2. @bean3. @Import4. @Conditional条件装配5. 配置绑定SpringBoot自动配置原理(源码分析)1. @Co

1. @Configuration

—— 放在类前注释 用于表示配置类,配置类也是一个组件

@Configuration(proxyBeanMethods = true) // 配置类 == 配置文件
public class MyConfig {
}

通过 proxyBeanMethods 很好的解决了组件依赖的问题 ——

  • 只是注册组件,组件间无依赖(false)
  • 有组件依赖(true)

测试组件依赖及测试类本身是组件

		// 配置类本身也是一个组件
        MyConfig bean = run.getBean(MyConfig.class);
        System.out.println(bean);
        run.getBean("user01", User.class);
        run.getBean("tom", Pet.class);
        System.out.println("用户的宠物是不是容器中的宠物" + (user01.getPet() == tom01));

2. @bean

—— 放在方法前表示给容器中注册组件 (单实例)

注:目前我对容器、组件的理解有限, 后期如果有更深入的理解,会更新此处

    @Bean // 给容器中添加组件,方法名作为组件id, 返回类型是组件类型 , 返回的值是组件在容器中的实例
    public User user01(){
        User zangsan = new User("zangsan", 18);
        zangsan.setPet(TomcatPet());
        return zangsan;
    }

测试是否注册成功

		ConfigurableApplicationContext run = springApplication.run(MainApplication.class, args);
        // 查看容器里的组件
        String[] names = run.getBeanDefinitionNames();
        for(String s: names){
            System.out.println(s);
        }

3. @Import

—— 放在配置类前,用于导入组件

@Import({User.class, DBHelper.class}) // 给容器中自动创建出这两个类型的组件
@Configuration // 配置类 == 配置文件
public class MyConfig {
}

测试导入组件是否成功

DBHelper bean1 = run.getBean(DBHelper.class);

4. @Conditional条件装配

—— 用于注册组件需要特定条件的情况

例如: 用户需要宠物,若无宠物tom组件,不能注册用户组件

    @ConditionalOnBean(name = "tom") // 表示有 tom 组件才能注册 user01 组件
    @Bean // 给容器中添加组件,方法名作为组件id, 返回类型是组件类型 , 返回的值是组件在容器中的实例
    public User user01(){
        User zangsan = new User("zangsan", 18);
        zangsan.setPet(tomcatPet());
        return zangsan;
    }

测试

        System.out.println("容器中是否含有宠物组件" + run.containsBean("tom"));
        System.out.println("容器中是否含有用户组件" + run.containsBean("user01"));

5. 配置绑定

绑定核心配置文件 (application.properities)

方法一:

@Component // 将组件加到容器中
@ConfigurationProperties(prefix = "mycar") // 配置属性名

方法二:

// 功能一:开启Car的属性配置
// 功能二:把指定的组件导入容器中
@EnableConfigurationProperties(Car.class)

测试类:

    @Autowired
    Car car;
    @RequestMapping("/car")
    public  Car car(){
        System.out.println(car);
        return  car;
    }

SpringBoot自动配置原理(源码分析)

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration  // 当前是一个配置类
@EnableAutoConfiguration  
@ComponentScan( // 指定扫描那些Spring注解
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

@EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage //——@Import({AutoConfigurationPackages.ReGIStrar.class})
@Import({AutoConfigurationImportSelector.class})

核心注解1:

@AutoConfigurationPackage 利用Registrar给容器中批量注册组件

—— 将指定包下的组件批量导入 (MainAppliaction 包下)

核心注解2

@Import({AutoConfigurationImportSelector.class})

—— 利用 getAutoConfigurationEntry() 方法给容器中批量导入组件

配置类位置

总结: SpringBoot 所有自动配置全部加载, 按照条件装配 —— 导入相关场景才能生效

  • springboot 加载所有自动配置类, 按条件生效 —— 生效的配置类为容器中装配组件(默认绑定配置文件中的值)
  • 用户有自己配置的组件, 以用户的为先
  • 定制化配置 —— 自己替换底层组件 / 修改底层组件配置文件中的值

到此这篇关于SpringBoot底层注解超详细介绍的文章就介绍到这了,更多相关SpringBoot底层注解内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot底层注解超详细介绍

本文链接: https://www.lsjlt.com/news/168800.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作