JAVAWeb学习笔记(八)_SpringBoot原理+后端总结+Maven高级

springBoot

配置优先级

优先级从低到高

  • application.yaml
  • application.yml
  • application.properties
  • java系统属性(-Dxxx=xxx)
  • 命令行参数(–xxx=xxx)
    打包项目并运行
  1. 执行maven打包指令package
  2. java -xxx -jar 包名 --xxx

bean的管理

bean的获取

默认情况,spring项目启动,会把bean都创建并放在IOC容器中,
可通过以下方法主动获取bean

@Autowired
private ApplicationContext applicationContext;

@Test
public void testGetBean(){
	//根据bean的名称获取
	DeptController bean1 = (DeptController) applicationContext
			.getBean("deptController");
	System.out.println(bean1);

	//根据bean的类型获取
	DeptController bean2 = applicationContext.
			getBean(DeptController.class);
	System.out.println(bean2);

	//根据bean的名称及类型获取
	DeptController bean3 = applicationContext.
			getBean("deptController", DeptController.class);
	System.out.println(bean3);
}

bean的作用域

  • @Scope(“singleton”),默认情况,容器启动时,bean被创建,可以使用@Lazy延迟初始化
  • @Scope(“prototype”),每一次使用都会创建一个新的实例对象

第三方bean

IOC容器的一个好处是,可以防止bean的重复创建,浪费计算机资源
所以需要将一些用到的第三方bean放入IOC容器
项目中自定义的用@Component
引入第三方的,用@Bean注解

springBoot原理

面试高频
spring frame,需要导入的依赖繁琐,入手难
spring boot,提供了起步依赖,然后根据maven的依赖传递该有的就全都有了

自动配置

自动配置就是spring容器启动后,一些配置类\bean对象就自动存入了IOC容器,不需要手动声明
方案一:@ComponentScan组件扫描
@ComponentScan({"com.itheima","com.exxample"})//定义在当前依赖包中
方案二:@Import导入
@Import({TokenParser.class})
//可导入普通类\配置类(封装了普通类)\ImportSelector接口实现类(按照ImportSelector接口封装了普通类)
@EnableXxxx注解,在依赖中定义注解,注解中封装了@Import注解
//现在用的方式,也更加方便,让依赖决定提供哪些普通类,不用自己(做项目的人)再去一个一个找了,在项目中声明这个@EnableXxxx注解就好了

源码跟踪

step1
@SpringBootApplication,springboot中最重要的注解,在启动类中
step2
@SpringBootConfiguration,声明当前是配置类
@EnableAutoConfiguration,实现自动化配置的核心注解(转step3)
@ComponentScan,组件扫描扫描当前引导类所在包及子包
step3
@Import(AutoConfigurationImportSelector.class),引入@bean的配置类

@Conditional

@ConditionalOnClass({Gson.class}),当前环境存在指定的这个类才声明该bean
@ConditionalOnMissingBean,当不存在当前类型的bean,才声明该bean
@ConditionalOnproperty(name=“name”,havingValue=“itheima”),配置文件(application.yml)中存在对应的属性和值,才注册bean到IOC容器中

@AutoConfiguration
@ConditionalOnClass({Gson.class})
@EnableConfigurationProperties({GsonProperties.class})
@ConditionalOnproperty(name="name",havingValue="itheima")
public class GsonAutoConfiguration {
    public GsonAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean
    public GsonBuilder gsonBuilder(List<GsonBuilderCustomizer> customizers) {
        GsonBuilder builder = new GsonBuilder();
        customizers.forEach((c) -> {
            c.customize(builder);
        });
        return builder;
    }

    @Bean
    @ConditionalOnMissingBean
    public Gson gson(GsonBuilder gsonBuilder) {
        return gsonBuilder.create();
    }

自定义起步依赖

在实际项目开发中,可能要用到很多的起步依赖,但是springboot起步依赖并不提供,为了免去之后项目开发时,还要重新编写或重新多次引入依赖,或者为了使用要写繁琐的代码,需要自定义

  1. 创建aliyun-oss-spring-boot-start(依赖管理)模块
  2. 创建aliyun-oss-spring-boot-autoconfiguration中的定义自动配置功能,并定义自动配置文件META-INF/spring/xxx.imports(自动配置)模块,在starter中引入该模块
  3. 在aliyun-oss-spring-boot-autoconfiguration中的定义自动配置功能,并定义自动配置文件META-INF/spring/xxx.imports

web后端开发总结

两张图片
在这里插入图片描述在这里插入图片描述

Maven高级

分模块设计

将项目按照功能拆分为若干个子模块,方便项目的管理维护,扩展,也方便模块间的相互调用,资源共享
pojo\utils直接封装在一个模块中,使用时直接引用就行,不然在每个模块中都要重复定义,冗余,影响性能

继承-继承关系

  1. 创建maven模块tlias-parent,为父工程,设置打包方式为pom
  2. 在子工程的pom.xml文件中配置继承关系
  3. 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)
    原理类似于类的继承(继承\重写)

继承-版本锁定

就是将版本信息放在一起,方便管理

<properties>
    <lombok.version>1.9</lombok.version>
</properties>

统一管理依赖版本,只管理子工程版本,还需要子工程引入所需依赖,
使用场景,当一些子工程需要某依赖,另一些不需要,就不在父工程配置依赖,只在父中管理版本,便于管理

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${lombok.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

面试题
和的区别
直接依赖,配置依赖就能在所有子工程用
管理依赖版本,还需要在子工程引入依赖

聚合

父工程就是聚合工程
按聚合打包可以一键实现

<modules>
	<module>../tlias-pojo</module>
	<module>../tlias-utils</module>
	<module>../tlias-web-management</module>
</modules>

打包时,如果不写上面代码在父工程打包,会很麻烦
自己定义的模块开始是不存在于依赖库中的,比如打包tlias-web-management,需要查看其需要什么依赖,结果需要tlias-pojo和tlias-utils两个依赖,所以要先将tlias-pojo和tlias-utils打包放到依赖库,再打包tlias-web-management,麻烦

私服

特殊的远程仓库(公司内部),架设在局域网中,用来代理外部的中央仓库(全球的),解决团队内部的资源共享
release(发行版本),稳定的版本
snapshot(快照版本),尚处于开发的版本
需要掌握资源的上传和下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值