Spring----初识

《在了解Spring前的一些知识》

 

 

《Spring的基本框架Spring Framework的了解》

 

 

 IOC:说简单一点就是我们本来一切对象都是通过new出来的,现在变成了由程序提供我们对象,要提供的对象写在.xml文件中;

这些特点学完后记得回顾:

 《IOC》

《思想》

 

 

 

 《IOC容器在Spring中的实现》

 

1.说明使用了工厂模式,对对象的制造进行了隐藏,同时提供对象,面向spring本身

 

 2.我们使用的类

 

 

 上面的FileSystem...这个实现类我们是不常用的,因为使用他有点使用绝对路径的感觉

而下面的ClassPath...这个实现类是用相对路径的感觉,比较常用

 

 

 《Spring对组件(Bean)的管理》

《通过XML文件来管理,获取Bean》

 

 

 《注意点》

1.在Bean对象中一定要有无参构造器,否则反射无法实现new

2.

 而 (实现接口的类 instanceof 接口)这个是为true的,还有(子类 instanceof 父类)也是为true的

 《通过XML来进行依赖注入》

所谓依赖注入其实就是为Bean对象赋值

《通过Setting来注入》

 

 

 《通过Construct(构造器)来注入》

 

 如果想要将name赋值为null,则如下操作,在setting注入中也是如此操作

 《对于特殊字符的注入》

如图:在我加了特殊字符后立马报错:

 为了解决这个问题:

 

 《为Bean中的类变量进行注入》

<关于ref的理解>

这个ref其实是对ioc所管理的对象的引用,下面会大量用到ref,表示对ioc管理的对象的引用

比如在Student中有Clazz(班级)这个类,在xml文件中配置时,就要调用IOC容器了,即使用xml中对应的bean去注入

 《为类中的数组注入数值》

如:我在类中有一个hobby的数组

 

 《对集合类(list,map)进行注入》

《list》

 被注释的是第二种方式:

 《map》

 

 

 《p命名空间》

 

 <Spring管理数据源和引入外部属性结构>

在原来我们都是通过properties文件的形式去设置jdbc的连接配置

 

 同样我们可以通过ioc容器去管理:

1.引入jar包:

 

 2.写xml:

 3.调用:

 当然还可以先配置properties文件,然后引入到xml文件配置中:

 《bean的作用域》

单例即:

通过ioc通过类.class得到的,永远是同一个对象

 

 

 

《bean的生命周期》

在javabean中:

 

 

 

 

 《在xml中给bean设置property和singleton对bean的生命周期的区别》

 

 《后置处理器对bean对象初始化之前和之后操作》

 

 

 

 在xml文件中配置:

 

 然后用即可

 《FactoryBean》

 

 我通过FactoryBean管理了Studnet这个类,然后在xml文件中配置FactoryBean,在可以直接使用student

 《XML自动装配bean对象》

我们可以把原来写在代码中的UserController userController=new UserController();这种硬编码方式改变,用XML来配置:

 

 

 

 

 

 我需要将useService交给xml来配置

 

 

 

 

 

 最初始的方法是:

 

 

 我可以用自动装配的方式来autowire="byType",其是通过bean对象中

 实现了get,set的属性的类型(本类,子类)来到xml中找可以符合这个类型的bean进行装配

 而byName是通过其在类中名字来与xml中的id进行匹配进行自动装配

 如在UseService中的这个属性

 然后我在xml中也配置了

 名字与id 匹配上了

 《基于注解来管理Bean》

《前置知识》

 

 

 

 

 《开始配置》

 

 

 

 

 

 

 

 

 

 

 

这个扫描线的base-package中的写法是:扫描我们写的包的下面的全部类与组件

 以上就相当于以前在xml中配置各种bean的效果

《扫描线注意点》

《配置自动装配》

在需要装配的属性上写上@AutoWire

 

 

 

 

 

 这个效果与以前在xml中写

<bean><property name="...." ref='......"/></bean>效果是一样的

《注意点》

 

 

 

 

 

 这里指定id为userServiceImpl的bean为userServerce来赋值

《id》

 

 

 自定义id:

 

 《报错》

 《AOP》

《前置知识----代理模式》

来看如下一个例子:

我想要一个类:其可以实现计算功能而且还带有日志功能

 

 

 .................

然后你可以看到,这样写日志方式十分不好:有大量重复的代码,基本框架一致,重复度高,不易维护

我想要像以前一样将重复的代码放到父类上,然后调用父类上的方法实现解决,但是日志的代码并不是像以前的代码是连续的

日志的代码是分散的,这样我们就难以做到上面的目的:

 

 

 《概念提出》

 

 代理模式即使再写个proxy类(代理类),其中的方法中实现对核心功能方法的调用,这样我们就可以在核心类中专心写核心类

从而把辅助内容写在proxy类的方法中

以上面的案例为例子:

《静态代理》

首先代理类也要对核心类的接口进行实现,因为最后在代理类中还是要调用核心类中的核心方法,不如直接实现核心类的接口

 

 《动态代理》

 

 

 其中获得代理类的方法:

 

 

 

 因为为了最好如果出现异常可以有异常记录,可以有如下改进:

《测试》

 

在动态代理的情况下,即使我不知道我的代理类的类是什么,但是我知道其要调用的核心方法实现的是什么接口,而接口也可以看做父类使用,所以我在测试的时候可以将Object类的proxy向下转型为接口类Calculator

《AOP的提出》

OOP:面向对象,其实也有纵向继承机制的特点

AOP:面向切面,其实也有横向抽取机制的特点

AOP即是代理模式核心思想的实现:

 

 《前置术语和概念》

 

 

 

 

 

 

 

 

 

 《配置》

 

 

 在xml配置注解方式的ioc管理:

 

 

 

 《工作方式》

 《获取连接点(代理方法)上的信息》

 

 

 

 

 

上面这个地方还有许多要改进的

  1.比如还有好多方法要前置通知,但是上面execution中我这样写只能作用于add方法

改进:

 

 

 类名中也可以用*比如com.atguigu.aop.*

代表在com.atguigu.aop下的任意类的任意返回类型,任意方法名,任意参数都可以用这个前置函数

  2.还有好多的通知,不仅仅只有前置通知,则可能会有重复的这个写法

 

 

改进:

 《通知方法》

 

 环绕通知一般一写就可以不用上面的通知写法了:

 

 

 

 

 《切面的优先级》

 《AOP----事务》

<jdbcTemplate>

spring中的操作jdbc的类

依赖配置:

 

 

 

 因为jdbcTemplate是spring给我们进行数据库处理的类,所以其也可以在ioc容器中受到管理

 《操作》

 《进行事务操作》

 

 

 

 

 

 

 

 

 

posted @ 2022-10-06 11:09  次林梦叶  阅读(33)  评论(0)    收藏  举报