Spring AOP IOC
AOP:
面向切面编程,通过预编译模式和运行期动态代理的模式来实现程序功能的维护和扩展
利用AOP可以对业务逻辑进行隔离,降低耦合度,提高程序的可重用性
不通过修改源代码方式,在主干功能里面添加新功能
AOP实现动态代理有两种情况:
1.有接口,使用JDK动态代理模式,创建接口实现类代理对象,增强类的方法
2.无接口,使用CGLib动态代理,创建子类的代理对象,增强类的方法
IOC:
控制翻转,把对象的创建和对象之间的调用过程交给spring来管理
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
Spring提供IOC容器实现两种方式
1.BeanFactory接口:IOC容器基本实现,是Spring内部的使用接口
加载配置文件时候不会创建对象,在使用或获取对象才创建对象
2.ApplicationContext:BeanFactory接口的子接口,在加载配置文件时候就会把在配置文件对象进行创建
Spring IOC 依赖注入方式:
1.Setter方法注入:
注入的属性需要有set方法,支持简单类型和引用类型注入时在bean实例创建完成后执行的,对象注入使用<property>的ref属性
2.构造方法注入:
通过构造方法注入依赖,spring容器会根据bean中指定的构造函数参数来决定调用那个构造函数
3.自动装配与注解注入
Spring的自动装配有三种模式:byTpye,byName,
byTpye模式:Spring容器会基于反射查看bean定义的类,然后找到与依赖类型相同的bean注入到另外的bean,必须存在set方法,否则注入失败
通过使用<bean>的autowire属性启动名称为userService的自动装配功能
byName:只会尝试将属性名与bean名称进行匹配,如果找到则注入依赖bean
IOC和DI(依赖注入)的区别:
IOC:控制反转:将对象的创建权,由Spring管理.
DI(依赖注入):在Spring创建对象的过程中,把对象依赖的属性注入到类中。
基于注解方式注入:
基于@Autowired注解的自动装配
通过 @Autowired的使用标注到成员变量时不需要有set方法,默认按类型匹配
required=false,false指明当userDao实例存在就注入不存就忽略
可以使用@Qualifier注解与@Autowired结合使用名称匹配
基于@Resource注解的自动装配
默认按 byName模式 自动注入,
上述两种自动装配的依赖注入并不适合简单值类型int,long,boolean,string
Spring容器也提供了@Value注入的方式
基于@Value注解的自动装配
@Value 注解可以用来将外部的值动态注入到 Bean 中,在 @Value 注解中可以使${} 与 #{}
@Value("${}"):可以获取对应属性文件中定义的属性值
@Value("#{}"):表示 SpEl 表达式通常用来获取 bean 的属性或方法
SpringMvc主要组件
1.前端控制器:用来接收用户请求,响应结果,类似于转发器
2.处理器映射器:根据请求的url来查找Handler
3.处理器适配器:负责执行Handler信息
4.处理器Handler:处理业务逻辑的Java控制类
5.视图解析器:进行视图解析,解析为真正的视图
6.视图view:一个接口,实现类支持jsp,freemarker,pdf
SpringMvc执行流程
1.用户发送请求到前端控制器
2.前端控制器收到请求调用映射器查找Handler
3.处理映射器找到Handler生成对象以及拦截器并返回给前端
4.调用适配器,后者去调用自定义的处理器类Controller
5.得到参数后返回给适配器,再返回给前端控制器
6.前端控制器传给视图解析,后者得到参数进行视图转换并返回前端,进行视图渲染并返回
SpringMvc和Springboot的区别
springbot是一个自动化配置的工具
mvc是一种轻量级的Web级框架
搭建项目时,mvc需要手动配置xml文件和Tomact服务器
springboot进行自动装配,内置服务器,打开就可以用
SpringBoot自动装配原理
从Spring factories文件中获取到对应的需要自动装配的类,并生成相对应的bean对象,交给Spring容器来管理,Spring默认扫描主类所在的包以及子包
SpringBoot常用注解
1.SpringBootAPPlication:
这是一个组合注解包含了:
@Configguration:指示当前类是一个配置类,用于创建配置上下文中的bean
@EnableAutoAPPlication:用于自动装配,自动添加所需的依赖和配置
@Componentscan:指示Spring扫描所有带component,service,controller,repository
的类,把他们注册成spring bean
2.@RestCotorller
于Controller类似,会将自动返回的值转换为json格式,是controller和responsebody的组合注解,表示这个类是一个restful风格的控制类,可以返回json/xml格式,默认返回json
3.@RequestMapping:用于映射请求url和处理方法,是mvc的核心注解,用于映射http请求和控制器方法之间的联系
Spring Bean的生命周期
1.实例化
a.通过反射去推断构造函数进行实例化
b.实例工厂,静态工厂
2.属性赋值
a.解析自动装配(byname,bytype,@Autowired)DI的体现
b.循环依赖
3.初始化
a.调用回调方法
b.调用初始化生命周期回调
c.如果bean实现AOP,创建动态代理
4.销毁
a.在spring容器关闭时进行调用
b.调用销毁生命周期回调