1、Spring
1.1、简介
1.2、优点
- Spring是一个开源的免费的框架(容器)!
- Spring是一个轻量级的、非入侵式的框架!
- 控制反转(IOC)、面向切面编程(AOP)
- 支持事务的处理,对框架整合的支持
总结一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!
1.3、组成
1.4、拓展
现代化的JAVA开发说白了就是基于Spring的开发!
spring boot
- 一个快速开发的脚手架
- 基于spring boot可以快速开发单个微服务
- 约定大于配置
spring cloud
- spring cloud是基于spring boot实现的
2、IOC理论推导
IOC本质
控制反转实际上是一种设计思想,DI(依赖注入)是实现IOC的一种方法
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入(Dependency Injection,ID)
3、HelloSpring
我们彻底不用去程序中修改了,要实现不同的操作,只需要在xml配置文件中修改,所谓的IOC一句话搞定:对象由Spring来创建,管理,装配。
4、IOC创建对象的方式
- 使用无参构造创建对象,默认!
- 通过参数类型
- 通过参数名
总结:在配置文件加载的时候,容器中管理的对象已经初始化了
5、Spring配置
5.1、别名
5.2、Bean的配置
5.3、import
6、依赖注入
6.1、构造器注入
6.2、Set方式注入
- 依赖注入:Set注入
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性,由容器注入
6.3、拓展方式注入
我们可以使用p命名空间和c命名空间进行注入
注意点:p命名和c命名空间不能直接使用,需要导入xml约束
6.4、bean的作用域
- 单例模式(Spring默认机制)
<bean id="user" class="com.cxh.pojo" c:age="18" c:name="C浩" scope="singleton"/>
- 原型模式:每次从容器中get的时候,都会产生一个新对象!
<bean id="user" class="com.cxh.pojo" c:age="18" c:name="C浩" scope="prototype"/>
- 其余的request、session、application,这些只能在web开发中使用到
7、Bean的自动装配
- 自动装配是Spring满足bean依赖的一种方式。
- Spring会在上下温中自动寻找,并自动给bean装配属性。
在Spring中有三种装配方式
1. 在xml中显示配置
2. 在Java中显示配置
3. 隐式的自动装配bean【重要】
7.1、byName自动装配
7.2、byType自动装配
7.4、使用注解实现自动装配
@Resource和@Autowired的区别
- 都是用来自动装配的,都可以放在属性字段上
- @Autowired通过byType的方式实现,要求这个对象必须存在
- @Resource默认通过byName方式实现,如果找不到,则通过byType方式实现,如果两个都找不到的情况下,就报错。
8、使用注解开发
- bean
- 属性如何注入
- 衍生注解
@Component有几个衍生注解,我们在web开发中,会按照MVC三层架构分层
- dao【@Repository】
- service【@Service】
- controller【@Controller】
这四个类的作用都是一样的,都是代表将某个类注册到Spring中,装配bean - 自动装配
- 作用域
@Scope - 小结
xml与注解
- xml更加万能,适用于任何场景,维护简单方便
- 注解不是自己的类使用不了,维护相对复杂
xml与注解的最佳实践
- xml用来管理bean
- 注解只负责完成属性的注入
- 我们在使用的过程中,只需要注意一个问题:要让注解生效,就需要开启注解支持
9、使用Java的方式配置Spring
这种纯Java配置的方式,在Spring Boot中所处可见
10、代理模式
为什么学习代理模式,因为这是SprinAOP的底层
代理模式的分类
- 静态代理
- 动态代理
10.1、静态代理
角色分析
- 抽象角色:一般会使用接口或者抽象类来决解
- 真实角色:被代理的角色
- 代理角色:代理真是角色,代理真是角色后,我们一般会有一些附属操作
- 客户:访问代理对象的人
代理模式的好处
- 可以使真实角色的操作更加纯粹,不用去关注一些公共业务
- 公共业务交给代理角色,实现业务的分工
- 公共业务发生拓展时,方便集中管理
缺点
- 一个真实角色就会产生一个代理角色,代码量会翻倍,开发效率会降低
10.2、加深理解
10.3、动态代理
- 动态代理和静态代理角色一样
- 动态代理的代理类是动态生成的,不是我们直接写好的
- 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
- 基于接口:JDK动态代理
- 基于类:cglib
- java字节码实现:javasist
11、AOP
11.1、什么是AOP
11.2、AOP在Spring中的作用
即AOP在不改变原有代码的情况下,去增加新功能
11.3、使用Spring去实现AOP
方式一:使用Spring的API接口
方式二:自定义来实现AOP【主要是切面定义】
方式三:使用注解实现
12、整合Mybatis
步骤:
1. 导入相关jar包
- junit
- mybatis
- mysql数据库
- spring相关
- aop植入
- mybatis-spring
2. 编写配置文件
3. 测试
12.1、回顾mybatis
1. 编写实体类
2. 编写核心配置文件
3. 编写接口
4. 编写Mapper.xml
5. 测试