web后端开发 --原理篇

配置优先级

支持三种格式的配置文件

server.port=8081 --application.properties
server:
  port: 8082  --application.yml
server:
  port: 8083  --application.yaml
优先级为properties>yml>yaml
开发时,推荐统一使用一种格式的配置(yml是主流)

java系统属性(优先级高于上三种)

-Dserver.port=9000

命令行参数(优先级高于java系统属性)

--server.port=10010

这两项在eidtconfiguration中VM options为java系统属性  Program arguments为命令行参数

 1执行maven打包指令package

2执行java指令,运行jar包

java -Dserver.port=9000 -jar tlias-web-management.jar --server.port=10010

springboot项目打包时,需引入插件spring-boot-maven-plugin"(基于官网骨架创建项目,会自动添加该插件)

Bean管理

获取bean

默认情况下,spring项目启动时,会把bean都创建好放在IOC容器中,如果想要主动获取这些bean

方式:

根据name获取bean: Object getBean(String name)

根据类型获取bean:<T> T getBean(Class<T> requiredType)

根据name获取bean(带类型转换):<T> T getBean(String name,Class<T> requireType)

@Autowired
    private ApplicationContext applicationContext;//IOC容器对象
    @Test
    public void testGetBean(){
        //根据bean的名称获取(填入需要的bean对象类名 首字母小写)
        DeptController bean1= (DeptController) applicationContext.getBean("deptController");
        //根据bean的类型获取
        DeptController bean2=applicationContext.getBean(DeptController.class);
        //分局bean的名称及类型获取
        applicationContext.getBean("DeptController",DeptController.class);

bean作用域

作用域                                说明

singleton                        容器内  同名称  bean  只有一个实例(单例)(默认)

prototype                        每次使用该  bean  时会创建新的实例(非单例)

request                             每个请求范围内会创建新的实例(web环境中,了解)

session                                每个会话范围内会创建新的实例(web环境中,了解)

application                        每个应用范围内会创建新的实例(web环境中,了解) 

可以通过@Scope注解来配置作用域

@Scope("prototype")

默认singleton中的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)

prototype的bean,每一次使用该bean的时候都会创建一个新的的实例

实际开发中,绝大部分的bean是单例的,也就是说绝大部分bean不需要配置scope属性

第三方bean

@Bean

如果要管理的bean对象来自与第三方(不是自定义的),是无法使用@Component及衍生注解声明bean的,需要用@Bean注解

若要管理的第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类

通过@Bean注解的name/value属性指定bean名称,如果未指定,默认是方法名

如果第三方bean需要依赖其他的bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配

//启动类中,不建议
@Bean//将方法返回值交给IOC容器管理,成为IOC容器的bean对象
public ASXReader(){
return new SAXReader();
}
//集中分配,推荐
@Configuration//配置类
public class CommonConfig{
@Bean
public SAXReader saxReader(){
return new SAXReader();
}}

项目中自定义的,使用@Component及其衍生注解

项目中引入第三方的,使用@Bean注解

SpringBoot原理

spring framework

繁琐(依赖,配置)

spring boot

简单,快捷(起步依赖,自动配置)

起步依赖原理

自动配置

当spring容器启动后,一些配置类,bean对象就自动存入到了IOC容器中,不需要我们手动去声明,省去了繁琐的配置操作

自动配置原理

使用

方案一:@ComponentScan组件扫描   //放入需要扫描的包

方案二:@Import导入。使用@Import导入的类会被Spring加载到IOC容器中,

导入  普通类

导入  配置类

导入  ImportSelector  接口实现类

@EnableXxxx注解,封装@Import注解   方便

源码跟踪

@SpringBootApplication是springboot中最重要的注解(三部分组成)

@SpringBootConfiguration:与@Configuration注解作用相同,声明当前也是一个配置类

@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包

@EnableAutoConfiguration:SpringBoot实现自动化配置的注解

@Conditional

作用:按照一定条件进行判断,在满足给定的条件后才会注册对应的bean对象到Spring IOC容器中

位置:方法,类

@Conditional本省是一个父注解,派生出大量的子注解:

@ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器

@ConditionalOnMissingBean:判断环境中没有对应的bean(类型或名称),才注册bean到IOC容器中

@ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到IOC容器。

案例(自定义starter)

实际开发中,经常定义一些公共组件,提供团队使用。在SpringBoor的项目中,一般将这些公共组件封装为SpringBoot 的starter。

新建module两个spring-boot项目

starter的pom.xml中引入autoconfigure项目

autoconfig中引入阿里云oss的依赖

autoconfig中写入需要的java文件

autoconfig中新建自动配置类alt+insert生成get,set方法

在aliyun-oss-spring-boot-autoconfigure模块中的定义自动配置功能,并定义自动配置文件META-INF/spring/xxx.imports

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值