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 相当于
发表评论