day03

Day03-01 知识点回顾


1.在IDEA中通过Git将我们的项目push到Gitee平台

1)两种方式(没有仓库-share,已有仓库-push)
2)常见问题(FAQ)分析
2.1)push过程被拒绝(账号不正确或者mail是隐藏账号,仓库名不遵守规则,push时远端仓库有readme)
2.2)push之前我们前面需要哪些Git操作(add,commit)
2.3)push时能只push我们指定项目模块吗(不push的模块不要commit)
2.4)不同项目可以放到同一个远程仓库(不可以),不同项目不同本地库,也会对应不同远程仓库.

2.通过Git将远端项目克隆(Clone)到本地

1)克隆方式(通过idea中clone选项,通过Git Bash工具基于git clone指令)
2)常见问题分析(FAQ)分析
2.1)克隆下来的项目如何运行?(jdk,maven,rebuild,out,mark as source root)
2.2)克隆的项目可以指定新的名字吗?(可以)
2.3)直接使用git clone指令克隆下来的项目如何打开?(基于idea菜单中file/open选项)

3.Idea中SpringBoot项目的创建及结构分析

1)项目的创建(Spring Initializr-旗舰版,Spring Assistant-社区版,…)
2)项目结构分析(pom.xml,src/main/java,src/main/resources,src/test/java,…)
3)项目启动过程分析?(thread/io->(Disk->load memory)->Class object->Read and Store Config–>BeanFactory–>Create Instance–>Store Instance)


Day03-02 Spring Boot 工程业务实践初步分析

-

1.背景分析

Spring Boot工程中是如何对我们自己写的Class进行资源整合和应用的,他在哪些方面做了简化呢?

2.业务初步设计

1)创建业务类(例如DefaultCache)
2)将业务类交给Spring管理(Spring如何发现这些类)
3)从spring中获取对象并进行应用测试(基于单元测试实现)

FAQ(常见问题)

1)创建的业务类对包有要求吗?(需要放在src/java/main目录下,启动类所在的包或子包中)
2)我们的业务类在交给spring管理时需要如何描述?(借助spring框架中定义的描述bean的注解进行描述)
3)为什么我们写类的实例要交给spring管理呢?(Spring可以赋予这个bean对象更多的科学特性)
4)Springboot工程中的单元测试类编写时有什么要求?(目录,包,注解)

  • 目录:src/test/java
  • 包:启动类所在包或子包(不是src/main/java目录)
  • 注解:(@SpringBootTests,@Test【org.junit.jupiter.api.Test】)

5)如何理解项目中的Has a的关系?(依赖->包含->有一个->在类中有一个其它类型的属性)
6)类与类之间的关系我们可以从哪个几个方法着手进行入门理解?(is a,has a ,use a )

  • is a (extends,implements)
  • has a (有一个)
  • use a (使用)

BUG

1)NullpointerException(NPE-空指针异常)
2)UnsatisfiedDependencyException(依赖注入异常)
3)NoSuchBeanDefinition(没有找到对应的Bean对象)
4)ParameterResolutionException(参数解析异常-单元测试方法添加参数)
5)…

3.总结(Summary)

通过这个业务入门应用,掌握了SpringBoot中我们自己写类该如何交给Spring管理,
并且理解了在运行过程中可能出现的一些问题及解决方案,同时意识springboot
工程为我们业务的实现所带来的一些便利(不用我自己关心依赖,没有做基础配置),
让我们更多的精力聚焦在了业务的实现上.


Day03-03 Spring Boot 工程中Bean对象的核心特性

1.背景信息

对于计算机而言,“计算"是它要解决的一个最核心的问题?那如何让计算更加的"高效"和"低耗”,
这也是我们程序员在编程过程中要考虑的一个直接目标.在spring工程中将对象交给spring管理,
其目的也是让Spring赋予这些对象更多的科学特性,进而让对象在内存中更加高效和低耗的运行,
对于这些科学的特性又如何理解呢?

2.Spring 中Bean的特性分析?

在Spring框架中为我们Bean对象赋予了很多科学特性,例如:
1)延迟加载(延迟对象创建)-通过此特性较少资源占用问题(暂时不用的一些大对象,可考虑使用此特性)
2)作用域(让对象存储在指定作用域中然后可以重复使用-提高访问性能)
3)生命周期方法(对象在创建和销毁之前可以对对象进行一些初始化和资源销毁操作)
基于这些特性,可以让我们在sping工程中的对象可以更加高效的解决一些业务问题.

3.Spring 中Bean的特性应用实践?

1)创建项目module
2)构建一个对象池对象,其类型为ObjectPool?(类似java中字符串池,整数池,线程池,连接池,…)
3)通过单元测试类,对对象池进行测试分析

FAQ?

1.如何对池对象进行设计才能够更好的让池对象服务于我们的业务?(低耗【延迟加载】,高效【作用域】)
2.一般池对象的设计会应用到什么设计模式?(享元模式-重点设计在对象的重用上)
3.Spring中延迟加载指的是类暂时不加载到内存吗?(不是,类加载到内存后暂时不创建类的实例)
4.Spring中的延迟加载对象的实例何时创建?(使用时)
5.Spring中的延迟加载特性重点要解决什么问题?(资源消耗问题)
6.Spring中对象作用域如何理解?(对象的一个应用范畴问题)
7.Singleton作用域的类,相同名字的实例在内存中只有一份(会存储到spring的对象池中),可以重用.
8.Singleton作用域的类如何让其支持延迟加载特性?(使用@Lazy注解描述)
9.Prototype作用域的类默认支持延迟加载吗?(支持,默认就是使用时创建,无需使用@Lazy注解描述)
10.Prototype作用域的类的实例是每次从spring框架请求时都会创建吗?会
11.程序中的每个对象都有生命周期,但不一定都要定义生命周期方法?正确


Day03-04 Spring Boot 工程中Bean的依赖注入分析

1.背景分析

Spring框架除了要解决对象的资源消耗,对象的应用性能问题,是否还要考虑对象的可维护,可扩展性.
假如要考虑这个特性,那么该如何实现呢?一般程序中会借助继承或组合实现这样特性,但继承或组合
就离不开耦合,如何降低这种耦合呢?

2.Spring 工程中的依赖注入分析?

Spring框架作为一个资源整合框架,为了降低类于类之间的耦合,提高其程序的可扩展性,推荐存在耦合时,
要尽量耦合于接口或工厂(我们现在项目中对象的创建底层是耦合了Spring的BeanFactory工厂).并由
spring框架完成具体值的注入(DI).

3.Spring 工程中依赖注入的业务设计及实现

1)创建项目module
2)创建业务接口Cache. (com.cy.pj.common.cache.Cache)
3)创建业务接口实现类SoftCache,WeakCache.
4)定义单元测试类CacheTest,并耦合于Cache接口,然后由spring完成接口值的注入.

FAQ?

1.@Autowire注解描述属性时,其依赖注入规则是怎样的?

当spring框架检测到由它管理的bean内部有属性使用了@Autowired注解描述,则会从spring
容器中按属性类型查找对应的Bean对象(这个过程叫依赖查找-DL),假如只有一个则直接注入.
假如有多个,还会基于属性名与bean对象的名字进行匹配,假如有匹配的则直接注入,没有匹配则
抛出异常(依赖注入异常),当然我们也可以借助@Qualifier注解配合@Autowired注解使用,指定
要注入的bean的名字.

2.Spring 中的依赖注入(DI)是基于什么技术实现的?反射技术
3.Spring 学习过程中有一个设计思想,称之为IOC(控制反转)【目标】,如何实现控制反转呢?可以借助DI【手段】

Bug分析:
1.NoUniqueBeanDefinitionException (非唯一bean的定义)
2…


homework

1.总结?
1)SpringBoot工程中Bean定义?
2)SpringBoot工程中Bean对象的特性有哪些?这些特性能带来什么好处?
4)SpringBoot工程如何实现依赖注入,@Autowired注解描述属性时,其注入规则是怎样的?

2.预习springboot工程如何实现hikaricp连接池的整合及应用.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值