认识Spring
- Spring是一个开源轻量级的框架
- Spring核心的的俩部分
- IOC:控制反转(平时我们要调用一个非静态的方法,是通过先去new一个对象,然后再通过对象去调用这个方法;但是通过IOC,我们就可以将对象的new操作就交给了Spring容器去管理,对象管理的权限交给了spring容器,这就是控制反转。
- AOP:面向切面编程,在不修改源代码的基础上面,我们对项目功能的扩展,就叫面向切面编程。
- Spring 是一个一站式框架(多层框架,在javaee三层结构中,每一层都提供不同的解决技术)
- web层: SpringMvc
- service层:Spring的ioc
- dao层:spring的jdbcTemplate
- 注:我的看法,虽说Spring的功能很强大,可以在每一层都可以提供解决技术,但我更喜欢专门的框架各司其职,更专业强大点!
细说Spring IOC
- IOC的操作方式
- IOC的配置文件方式
- IOC的注解方式
- IOC底层原理
- xml配置文件
- dom4j解决xml
- 工厂设计模式
- 反射
- 注:我们通过写配置文件,然后通过dom4j解析xml文件,经过工厂模式,反射的方式,映射读取到xml所配置类的属性方法
- Bean实现的3种方式
- 通过类的无参构造方法来实现(注:如果类中不存在无参构造方法的话,会出现异常BeanCreationException)
- 通过静态工厂的模式来创建
- 通过实体工厂来创建
- 注:在实际开发中,我们只采用第一种方式,通过类的无参构造方法来实现bean的创建
- Bean的四种属性
- id属性值:表示给class起得名称,无命名要求,建议是类名首字母小写,id属性值,不能包含特殊字符,在代码中根据id值得到配置对象
- class属性值:创建对象所在类的全路径
- name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性里面可以包含特殊符号(满足前期其它框架的的命名中有特殊符号的情况)
- scope属性:bean的作用域
- singleton:默认值,单例模式
- prototype:多例
- request:创建对象,把对象放到request域里面
- session:创建对象,把对象放到session域里面
- globalsession:创建对象,把对象放到globalsession域里面
- 属性注入的方式
- 使用set方法注入
- 有参数构造注入
- 使用接口注入
- 注:在Spring框架里面,只支持set方法注入(重要,常用)和有参构造方法
- p名称空间注入(特殊方式,不常用)在beans中加入xmlns:p,如下;再配置bean
- 注入复杂的数据类型
- 数组的注入(方式:)
- list的注入(方式:)
- map的注入(方式:)
- property的注入(方式:)
- IOC和DI的区别
- IOC: 控制反转,把对象创建的权利交给spring容器来处理配置
- DI:依赖注入,向类里面的属性中设置值
- 关系:依赖注入不能单独存在,需要在IOC的基础上完成操作
- Spring整合web项目的原理
- 加载spring的核心配置文件 ,我们测试的时候是通过new classPathXxlApplicationContext对象实现的,效率低下
- 实现思想:最好在服务器启动的时候,就可以加载配置文件和创建对象
- 实现原理:
- 通过监听servletContext对象
- 监听器
- 具体步骤:
- 服务器在启动的时候,会为每个项目创建一个servletContext对象
- 在servletContext对象创建时,可以使用监听器监控到servletContext对象具体在什么时候创建
- 在监听到servletContext对象创建的时候,加载Spring配置文件,创建对象
- 把创建出来的对象存入servletContext域对象中(通过setAttribute方法存入)
- 获取对象时,到servletContext域对象中拿对象(通过getAttribute方法拿到)