什么是框架
高度抽取可重用代码的一种设计;具有高度的通用性;
把一些工具抽取出来形成框架,在同类型业务中可以通用,再次使用时只需要更换一些其他业务即可。
多个可重用模块的集合,一起形成在某个领域的整体解决方案。
在盖房子中,javaweb就是主人需要从头到尾全部自己干
框架就是主人雇一些工人,水泥工人,设计工人,地板工人,主人只需要命令使用工人即可。
框架是一个半成品软件,根据业务需求进行动态组合
jar包是就是一种工具类
什么是Spring框架(开发人员的春天)
一个开源的容器框架;可以通过Spring来管理所有的组件(类);很多功能能够根据容器的简单配置来实现;
- 具有某种功能的类,称之为组件。
Spring的核心功能:IOC和AOP;
Spring的优点:
1.非侵入式:基于SPring开发的应用程序中的对象可以不依赖于Spring的API。项目不依赖于API
2.依赖注入:IOC / DI
3.面向切面编程:AOP
4.容器:Spring是一个容器,包含并且管理应用对象的生命周期
5.组件化:Spring中所有的功能,都是抽取成了单独的组件,用了加上不用了删掉,灵活性很高,复杂性低,导包简单
6.一站式:用好一个Spring,可以熟悉其他的所有框架。Spring自身也提供了表述层的SpringMVC和持久层的Spring JD
Spring框架核心:IOC+AOP:
IOC:
一:容器 IOC(Inversion(反转)Of Control):控制反转;
什么是IOC
1.控制反转,把对象创建和对象之前调用过程,交给Spring进行管理
2.使用IOC的目的:降低代码耦合度
控制:资源的获取方式:
案例:
1.主动式:要什么资源就自己创建即可;
BookServlet{
BookService bs = new BookService();//简单对象,没什么问题
AirPlane ap = new AirPlane();//无功能,所以在复杂对象的创建时,是一个庞大的工程。
}
2.被动式:资源的获取不是自己创建,而是交给一个容器来创建和设置;
BookServlet{
BookService bs;
public void test01(){
bs.checkout();//在当前阶段会空指针异常
}
}
- 容器:管理所有的组件(组件:有功能的类)
- 假设,BookServlet受容器管理,且BookService也受容器管理,此时上操作合理;
容器可以自动的探查出来哪些组件(类)需要用到哪些组件(类)
容器可以帮助我们创建BookService对象,并且把BookService对象赋值过去; - 容器:IOC:控制反转;主动的new资源变为被动的接受资源。(容器就像一个婚介所)
二:DI:(Dependency Injection 依赖注入)
- IOC是一种思想,DI基于这种思想实现的描述
- 容器能够知道哪个组件运行的时候,需要另一个类;
- 容器通过反射的形式,将容器中准备好的BookService对象注入**(利用反射给属性赋值)**到BookServlet中;
- 只要是容器管理的组件,都能够使用容器提供的强大功能。
三:如何给容器中注册组件
以前是自己new对象,现在是所有的对象都交给容器来创建;
框架编写流程:
- 导包
- 写配置
- 测试
四:IOC底层原理
(1)XML解析,工厂模式,反射
(2)IOC底层原理,目的是为了降低耦合度
IOC接口
1.IOC思想基于IOC容器完成,IOC容器的底层就是对象工厂
2.Spring提供IOC容器实现的两种方式:(两个接口)
(1)BeanFactory:IOC容器基本实现,是spring中内部的使用接口,一般不提供给开发人员使用。
- 加载配置文件时不会创建对象,在获取对象(使用对象)时才会去创建对象
(2)ApplicationContext :是BeanFactory接口的子接口,提供了更多更强大的功能,一般是提供给开发人员使用的。 - 加载配置文件是就会把在配置文件中的对象进行创建
- 相同点:他们都能够实现加载配置文件,通过工厂模式创建对象
- ApplicationContext方法更好,因为Spring一般搭配web项目实现,在服务器进行启动,将耗时耗资源的操作都交给服务器处理,慢一点不要紧,浏览器端直接用就可以了。
3.ApplicationContext接口有实现类
IOC操作Bean管理(概念)
1.什么是Bean管理
(0)Bean管理指两个操作
(1)Spring 创建对象
(2)Spring 注入属性
2.Bean管理操作有两种方式
(1)基于XML配置问价方式实现
(2)基于注解方式实现
IOC操作Bean管理(基于xml方式)
1.基于xml方式创建对象
(1)在spring配置文件中,使用bean标签,在标签里面添加对应的属性,就可以实现对象创建。
(2)在bean标签中有很多属性,介绍常用属性。
- id 属性 :唯一标识
- class 属性 :创建对象所在的类全路径(包类路径)
- name 属性 (与id类似,可以加特殊符号,基本弃用)
(3)创建对象时,也默认调用无参构造方法
2.基于xml方式注入属性
(1)DI:依赖注入,就是注入属性(DI是IOC的一种具体实现)
3.第一种注入方式:使用set方法注入
(1)创建类,定义属性和对应的set方法
(2)在Spring配置文件中配置对象创建,再配置属性注入
测试代码:
4.第二种注入方式:使用有参的构造注入
(1)创建类,定义属性
(2)创建属性对应的有参构造方法
(3)在Spring配置文件中进行配置
测试代码:
5.p名称空间注入(是对于set方法注入的一种简化)(了解即可不多用)
(1)使用p名称空间注入,可以简化基于xml配置方式
第一步:添加一个p名称空间在配置文件中
第二步:进行属性注入,在bean标签里面进行操作
IOC操作Bean管理(xml注入其他类型属性)
1.字面量
(1)null值
设置null值,用null标签来设置
测试代码:
(2)属性值包含特殊符号
例如地址内容中包含<>特殊符号,程序无法识别哪些是value值,哪些是标签符号,故报错
所以,应该将特殊符号当做value的值去执行:
方法一:转义,使用<、>对<>进行转义
方法二:把带特殊符号的内容写到CDATA中去
测试结果:
2.注入属性–外部bean
3.注入属性–内部bean和级联赋值