1.Spring作为轻量级框架的两大核心:IOC、AOP、事务处理(基于AOP)。
2.经过学习要会什么?
核心概念IOC、DI >>>>整合mybatis >>>>AOP概念及操作>>>>事务实用开发
3.架构图:

4.为什么提出了IOC概念?
为了解决代码耦合度偏高,想要做到使用对象时在程序中不主动使用New产生对象,转换为外部提供对象。由此引入了IOC(控制反转),原来是程序创建改为Web创建对象
5.IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean。
6.Service类依赖Dao对象才能运行,而IOC容器中只给了Service对象,因此运行还会保存。又因为IOC容器中包含Service、Dao对象,由此IOC容器将Service和Dao绑定。即DI(依赖注入),在容器中如果两个Bean对象存在依赖关系,IOC容器会自主建立bean与bean之间的依赖关系,称为依赖注入。
7.充分解耦的目标是如何实现的?
先使用IOC容器管理Bean(IOC)>>>>再在IOC容器中将有依赖关系的Bean进行关系绑定(DI)。由此达到使用对象时不仅可以从IOC容器中直接获取,并且获取到的Bean已经绑定了所有的依赖关系。
8.使用IOC时要考虑什么?
①IOC要管什么? Service和Dao
②如何将被管理的对象告知IOC容器? 通过配置文件
③被管理的对象交给IOC容器,如何获取到IOC容器? Spring中有接口
④IOC容器得到后,如何从容器中获取Bean? 接口中的方法
⑤使用SPringl技术导入哪些坐标? pom.xml中导
9.初识IOC{
Spring坐标
,由此可以在Resource目录下创建XML文件(Spring config) applicationContext.xml
配置Bean的标签 <bean/> 要管理的对象由class =""告知,例
。要配实现类,非接口。起别名用id =" " ,写程序的时候用。
获取IOC容器时,由于ApplicationContext是一个接口,故不能new对象要new实现类Class....,且要加载配置文件。获取bean时通过IOC容器中.getBean方法时获取的是对象,注意转类型。}
10.初识DI{


业务层代码中不在使用new的方式创建dao对象,且提供相应的set方法。要将Dao放到Service中,即Service中有个属性叫Dao。第一个bookDao是Service中的属性,ref中的bookDao是xml文件中的。
11.关于Bean?
①别名:Bean是可以起多个别名的,
这个异常只存在两个问题,实现类中getBean中的名称错误/xml文件中name =" "出错
不同别名可用逗号,分号;空格隔开,都会起作用。
②作用范围:Spring默认创建的Bean对象是单例的,即地址相同。要创建多例的,在<bean/>中scope=" "中配置。 singleton---单例,prototype----多例
为什么Bean创建的对象默认是单例的? 因为容器存储地址总归是有限的,要是默认多例那就再创建对象时用一个造一个,无穷无尽。不符合复用效果
哪些适合交给容器管理的Bean?表现层对象----service 业务层对象----service 数据层对象----Dao 其它工具类对象
不适合的? 封装实体的域对象。
③bean是怎么创建的?
三种实例化方式:
Ⅰ无参构造:公共的,私有的无参构造方法都能访问,蕴含反射知识。对于Spring的报错,
(从最后一行开始看) 如果无参构造有参数就会报Instantiation of bean failed
Ⅱ静态工厂:工厂创建对象回顾,创个Service并实现Imp,再factory包下
,在启动类
通过工厂创建Bean
如果没有factory-method,此时创建的是Factory对象。我们需要的是Factory方法中创建的对象,故要告诉它是工厂中的哪个方法。
Ⅲ实例化工厂:(非静态)实例化工厂第一步是要先创建个对象出来,
![]()
为了简化这种写法,
这是一种标准写法,FactoryBean是一个接口,里面的泛型需要创建哪个对象就填哪个。 getobject替代原来静态工厂中的getUserDao方法。getObjectType即对象是什么类型的。
在这个方法中修改创建的Bean对象是单例还是多例
④Bean的生命周期
首先要在类中写无参构造,其次要在Bean标签中配置。![]()
要检验destory方法是否执行,要关闭IOC容器。
在Class...类下的。close()方法。.close()方法比较暴力,还有一种关闭钩子。
区别:.close()如果放在getBean前会报错,直接关闭容器。
第二种使用接口:

12.DI部分{
①依赖注入。 向一个类中传递数据有两种方式:普通方法(set方法)或构造方法
依赖注入分为四种:Ⅰ使用set方法注入简单类型/引用类型。(setter注入)
Ⅱ使用构造方法注入简单类型/引用类型
set方法:
ref是引用,给值只能value
构造器注入:
第一个name是形参名,ref是引用类型
这种写法解决了与形参名耦合度他太高的问题,但是涉及多个无法识别。
解决上述的多个参数的问题、
②依赖自动装备:IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配。分为四类:类型、名称、构造方法、不启用自动装配
![]()

③集合注入的标准书写格式:


13.数据源对象管理(用Bean管理第三方对象)
管理第三方提供的资源本质即告知哪个对象需要被管理,由其提供对应的属性。
例:
14.spring加载properties文件中的信息:
①开启一个新的内部空间
(开启context命名空间
)

②使用context空间加载properties文![]()
③使用属性占位数${}读取properties文件中的属性
15.容器操作:
一种是之前的加载类路径下的配置文件,ClassPath ..... ;另一种为通过文件系统加载配置文件,即绝对路径的文件系统下查找所需
、
获取Bean的第二种,之前getBean都需要强转。
此写法无需强转,但不唯一会有错。
总结:


容器篇总结:

bean相关:

依赖注入:

Bean注解篇:
纯注解开始模式中用config包下的Java类Springconfig代替Spring核心配置文件。配置文件的结构为@Configuration,配置文件中的扫描换为@ComponentScan

bean的生命周期:

bean的依赖注入:




AOP篇:
定义:面向切面编程,一种编程范式,指导开发者如何组织程序结构。
作用:在不惊动原始设计的基础上为其进行功能增强。源自于Spring的无侵入式理念。
描述:再AOP中,想让每一个方法都具有的内容(共性功能)称为通知,通知可以按照开发需求制造很多个即通知类。而程序中的原始方法称为连接点,要追加功能的方法称为切入点。能够描述通知内容与切入点关系的称为切面(绑定关系)。注:切入点范围小,连接点范围大。
步骤:①导入坐标
②原来的接口、实现类、执行程序不做任何改动。
③spring核心配置文件中要加注解@EnableAspectAutoProxy(告知程序要使用注解进行开发)
④写一个通知类,@conpoent(加载自身)@Aspect(告知Spring注解下的方法是用来做AOP的) @Pointcut(定义切入点)@Before(绑定切入点和通知)


AOP工作流程:
ⅠSpring容器启动;
Ⅱ读取所有配置中的切入点(只有绑定的会被读取);
Ⅲ初始化Bean,判定Bean对应的类中的方法是否匹配到任意切入点。如果匹配失败,就创建对象;匹配成功,创建原始(目标)对象的代理对象。
Ⅳ获取Bean执行方法
AOP核心概念:
目标对象:原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的。
代理:目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现。 注:Spring AOP的本质即代理模式
AOP切入点表达式
切入点:要进行增强的方法; 切入点表达式:要进行增强的方法的描述方式


总结:

AOP通知类型:
AOP通知描述了抽取的共性功能,根据共性功能抽取位置的不同,最终运行代码时加入的位置不同。分为:前置、后置、环绕、返回后通知、抛出异常后通知



}
浙公网安备 33010602011771号