springboot自动装配

参考文章 https://blog.csdn.net/image_2012/article/details/106532444

1、新建springboot项目
方式一:spring官网提供了图形化的新建springboot项目的方式
https://start.spring.io

在这里插入图片描述
如图所示,填写项目坐标,选择项目依赖,下载即可。

方式二:使用IDEA直接创建
IDEA集成了spring Initializer创建项目的方式,我们使用此种方式创建
在这里插入图片描述
点击下一步,填写项目坐标信息:
在这里插入图片描述
选择项目依赖:
在这里插入图片描述
然后next填写项目名称,点击finish,然后就默默的等待就好!

2、项目结构
在这里插入图片描述

3、新建 AppController

@RestController
public class AppController {

    @GetMapping("/get")
    private String get(){
        return "hello,App!";
    }
}

启动 SpringbootFirstappApplication 并观察结果:
在这里插入图片描述
浏览器访问:
在这里插入图片描述

ok,可以正常访问,至此,项目成功创建。

4、yaml配置注入
4.1 在springboot项目中的resources目录下新建一个文件 application.yml
4.2 编写一个实体类 Person

@Component 
public class Person {

    private String name;

    private int age;

    //此处省略有参无参构造、get、set方法、toString()方法  
}

4.3、我们原来是如何给bean注入属性值的!@Value

@Component
public class Person {

    @Value("zhangsan")
    private String name;

    @Value("18")
    private int age;

    //此处省略有参无参构造、get、set方法、toString()方法  
}

4.4、用springboot为我们创建好的测试类跑一遍

@SpringBootTest
class SpringbootFirstappApplicationTests {
    
    
    @Autowired
    Person person;

    @Test
    void contextLoads() {
        System.out.println(person.toString());
    }

}

在这里插入图片描述

4.5 接下来我们使用yaml的方式看看如何给属性赋值
在创建好的application.yml文件中加入以下内容:

person:
    name: zhangsan
    age: 18

然后注入到person类中,需要使用注解@ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;

    private int age;
    
    //....
}

然后继续使用测试类跑一遍试试:
在这里插入图片描述

总结一下
编写yaml配置文件,配置对应的属性值
在对应的类上面添加注解 @ConfigurationProperties
在注解中填写配置文件的值 (prefix = “person”)
5、自动装配
我们从一个注解开始

@SpringBootApplication
public class SpringbootFirstappApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootFirstappApplication.class, args);
    }

}

@EnableAutoConfiguration

在这里插入图片描述
继续往下走:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

我们看到有一个引入了这样一个类

AutoConfigurationImportSelector

打开这个类从这里开始

org.springframework.boot.autoconfigure.
AutoConfigurationImportSelector#selectImports

往下找,发现这样一个方法

getCandidateConfigurations //顾名思义 获取候选配置类

在这里插入图片描述
继续往下走,我们会看到这样一块内容
在这里插入图片描述

“META-INF/spring.factories”

从上面内容可以看到,是在这个文件里面获取配置类相关信息
我们在spring-boot-autoconfigure这个包中找到这个文件
在这里插入图片描述
打开这个文件。
在这里插入图片描述
发现一堆以AutoConfiguration结尾的文件,我们以RabbitAutoConfiguration为例打开看看
在这里插入图片描述
打开这里的RabbitProperties
在这里插入图片描述
这里就很熟悉了,这就是yaml的方式给对象赋值,也就是说这里的属性都可以在yaml的配置文件中配置
可以打开yaml文件输入spring.rabbitmq看看工具给我们的提示
在这里插入图片描述
可以看到一堆属性值,而这些值都是RabbitProperties这个类中的属性。

总结一下:
SpringBoot在启动的时候从META-INF/spring.factories中获取EnableAutoConfiguration指定的值
将这些值作为自动配置类被导入 , 自动配置类就生效 , 帮我们进行自动配置工作;
有了自动配置类 , 就免去了我们手动编写配置注入功能组件等的工作;
6、模拟springboot的套路,定义一个自动配置类;
我们将我们的项目改造一下:

@Component
@ConfigurationProperties(prefix = "person")
public class PersonProperties {

    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class Person {

    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

新建文件PeresonAutoConfiguration

@Configuration
@EnableConfigurationProperties({PersonProperties.class})
public class PeresonAutoConfiguration {

    @Autowired
    private PersonProperties personProperties;

    @Bean
    public Person person(){
        System.out.println("PeresonAutoConfiguration.....start");
        Person person = new Person();
        person.setAge(personProperties.getAge());
        person.setName(personProperties.getName());
        System.out.println(person.toString());
        return person;
    }
}

在resource下面新建 META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.xxx.springboot.springbootfirstapp.PeresonAutoConfiguration

激活自动装配

@EnableAutoConfiguration

//@SpringBootApplication
@EnableAutoConfiguration
public class SpringbootFirstappApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootFirstappApplication.class, args);
    }

}

在这里插入图片描述
由于引导类@SpringBootApplication注解包含自动配置这个注解,所以也可以直接启动,效果是一样的。

总结一下:
编写配置类,并与yaml配置文件对应
编写自动转配类XXXAutoAconfigutation,并菩提之刚刚写好的配置文件
目录 META-INF/spring.factories 中配置自定义装配类
激活自动装配@EnableAutoConfiguration
自定义starter就是这个套路,现在可以去套路你自己的starter包了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值