0.前置学习课程为JavaWeb

(一共就一点点,2分钟就看完了,有基础可以直接略过,0基础还是花2分钟看下.先搭起来个知识框架,设计一些乱七八糟的层,不稍微看看没法学java ee):

一 web网站的开发模式

前端搭架子(样子),数据库往架子里填进去数据,后端是用来写逻辑的.

浏览器属于一个程序,能够解析前端代码和后端代码,将前/后端写好的代码解析后做出反应(比如搭架子/根据url访问java程序去找数据并填数据)

二 三层架构

原代码:(解耦性差,不遵循单一职责原则)

分层后(重要):

我个人的理解是类似于取快递的过程.

Controller层_听需求和相应需求,比如说告诉对方我要取快递/寄快递

Server层_给你提供相应服务,比如说为你取快递/寄快递/处理快递问题

Dao层_数据访问层,查快递,和数据库有关的

强烈建议这里去花十几分钟听一下!!!!!时间有限只听这一节就行(把前一节的案例听一下更好,便于理解,一共没几分钟),时间充裕建议直接听这套javaweb课程就完事了,我打算这几天考完期末ssm框架后来详细听听这个课:

Day05-09. 分层解耦-三层架构_哔哩哔哩_bilibili

总框架:

用SSM框架学习JavaEE

第一部分:Spring

一 概述

Spring的2个核心理念:

1.控制反转IoC——对Bean对象的管理

2.面向切面编程AoP——事务(指一系列数据库操作的集合)管理等功能

IoC和DI

IoC介绍:由主动 new对象 转化为 由外部(IoC容器 即Spring容器)提供对象,在容器中的对象称为Bean对象。

DI介绍(依赖注入):在容器内给bean和bean之间"绑关系"

目标:充分解耦

使用IoC容器管理bean + 将容器内有依赖关系的bean绑关系 =====>>使用对象时,不仅可以直接从容器中获取,且bean已经绑定了所有依赖关系

二 IoC

0.包结构

(一)介绍:

由主动 new对象 转化为 由外部(IoC容器 即Spring容器)提供对象,在容器中的对象称为Bean对象。

(二)使用思路+具体步骤

1.管理什么?  --->Service和Dao

2.使用Spring导入哪些坐标(依赖)?----->在pom.xml中导入依赖

导入的依赖名是spring-context

3.如何将需要被管理的对象告诉容器?--->(即放入bean)配置.

创建spring的配置文件,并放入bean

a.在resources下创建名为applicationContext.xml的配置文件

b.配置bean的方法:这里下面有具体说

4.如何获取和使用IoC容器?--->接口

在主程序入口类(名为App,与Dao层 Service层同级的,有主函数的类中):

a.先通过接口获取容器(接口不能创建对象,new一个接口的实现类才能创建):

ApplicationContext ctx = new classPathXmlApplicationContext("applicationContext.xml");

5.得到IoC容器后,如何拿出bean?---->接口方法(获取bean的方法)

b.再获取容器里的bean对象(用getBean("id")方法)

BookDao bookDao = (BookDao)ctx.get Bean("bookDao"); 

                                   //↑这里因为是object类型,所以需要强制转换一下类型

三 DI

(一)介绍

DI介绍(依赖注入):在容器内给bean和bean之间"绑关系"

(二)思路+具体步骤

1.基于IoC管理bean

2.Service中使用new形式创建的dao对象是否保留?--->否,删除右边

3.Service中需要的dao对象怎么进入到Service中>?---->提供方法

在Service实现类里提供创建Dao的方法

4.Service与dao之间的关系如何描述?----->配置关系

如何配置当前bean的属性?

//name 配置哪一个(前面类里的代码的属性的名称)具体的属性【也就是前面set方法的对象名setXxx(... Xxx)】

//ref参考着哪一个(要绑定依赖关系的bean)bean的id

Tip:插入一点Java基础复习

(只针对我自己这种几乎是0基础的java水平,会的不用看)

四 bean

(一)bean的配置

1.基础配置(在配置文件applicationContext.xml中)

id:唯一、通过id获取对应bean。

class:配置bean的全路径类名、bean的类型。

       

       

2.bean别名配置

用属性name表示

eg:

3.bean的作用范围:——控制bean创建实例的数量

一个bean造出来的对象,是不是同一个对象?

用scope属性控制,是同一个对象就用单例 (默认),不是就用非单例prototype

scope = "prototype"

多例eg:

(二)bean的实例化方法(三种----其实是四种,1和4重要)

构造方法静态工厂实例工厂     FactoryBean

1.法一【常用】:创建空参的构造方法(可以不写(默认有空参的),也可以写上)

具体实现:

小tip:如何看报错?从最下面(最核心)开始往上看起。一般解决了最后一个就行。

2.法二【了解即可】静态工厂

这需要前面的基础太,不会,也不咋重要,看看拉倒

3.法三【了解即可】使用实例 (非静态)工厂

4.法四:【后期常用】——FactoryBean,把法三改进了,造出来的是getObiect()方法里的对象

(三)bean的生命周期

介绍:bean从创建到销毁的过程

(三)Bean的注入方式(依赖注入的方式)

0.依赖注入的两种方式:

setter(属性)注入构造器注入(构造方法注入)

详细笔记:两种方式就相当于换个方法,一种是set一种是构造方法, 然后再进行相应的配置

(一)Setter注入

引用类型简单类型

Setter注入---引用类型

1.提供set方法

2.配置中用property标签的ref属性注入 引用类型的对象

详细笔记:

Setter注入---简单类型

1.提供set方法

2.配置中用property标签的value属性注入 简单类型的数据

详细笔记:

(二)构造器注入

构造器注入的两种类型

引用类型简单类型

引用类型

1.使用全参的构造方法

2.使用constructor-arg标签的ref属性

详细笔记::

简单类型

1.使用全参的构造方法

2.使用constructor-arg标签的value属性.配置时:name识别的是形参的名字

详细笔记:

了解即可的的内容:

①用name的方法,耦合性太强(形参名称问题)

②解决形参名称问题,用type属性(但不能有多个同类型的参数)

③解决参数类型重复的问题,用参数位置来解决问题,,用index属性(从0号开始)

详细笔记:

(三)依赖注入方式的选择

1.必须选的依赖,用构造器注入

2.可选可不选的依赖,用setter注入

3.去公司人家要严谨点,最好用构造器

4.[重要]自己开发用setter注入,这个好用!

详细:

(四)小结:

(四)自动装配(自动注入)

(一)分类

按类型[常用]

aotuwire = "byType"

按名称

aotuwire = "byName"

(二)步骤

1.提供一个set方法

2.在bean属性配置时,加个aotuwire属性

(三)装配特征

(五)集合注入

(一)类型

数组ListSetMapProperties

(二)具体操作

1.定义简单类型,并提供它们对应的set方法

2.装配:

[通用格式]

在装配时,用property标签 name = "方法名":

<类型名>决定了要注入啥类型

                //注简单类型:这里也很会根据不同类型使用不同的标签

(六)案例:数据源对象管理 [以后学精了在实际开发中再花时间研究]

管理一个第三方对象----重点是思路

eg1.连接池 druid的数据源对象

1.导依赖

去Maven网站找

2.配bean(看看用啥注入方式,这里用setter方法(找的) )

eg2.管一个c3p0的数据源对象

1.导依赖

2.配bean:搜一下它连接池的对象是谁之类的...

(七)加载外部properties文件

1.开启context命名的空间

2.使用context空间加载properties文件

3.把value的值改成属性占位符${去properties文件里找属性}读取 properties中的属性

详细笔记:

小坑:

1.和系统环境变量的名字冲突:

2.加载多个properties 文件(第一个*为也加载jar包中的properties;第二分*是加载你自己全部的properies文件)

详细笔记:

五 容器

(一)  容器

(一)创建容器 (2种)

[常用方式一]

见图1部分

详细:

(二)获取bean ( 3种 )

见上图2

详细:

(三)容器类层次结构图

(四)BeanFactory初始化

BeanFactory是所有容器的顶层接口

(二)容器/bean/依赖注入 总结

容器相关bean相关依赖注入相关

(一)容器相关

(二)bean相关

常用的也就没几个

(三)依赖注入相关

也就是setter(属性)注入重要一点

六 注解开发

0.框架

(一) 使用注解形式定义bean

(一)解释下是啥意思

把bean用注解的方式放入容器

@Component  相当于 0