Spring 框架
Spring 框架的基本理解
关键字:核心思想IOC/AOP、作用(解耦,简化),简单描述框架组成
Spring框架是一款轻量级的开发框架,核心思想是IOC(控制反转)和 AOP(面向切面编程),为Java应用程序开发提供组件管理服,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用(JMS、任务调度、缓存、ORM框架),是一个基础架构性的开发框架;
Spring框架包括:IOC容器、Validation数据校验,AOP面向切面编程、Transactions事务管理、Spring JDBC、Spring MVC框架、以及各类第三方JavaEE中间件技术集成。
Spring 框架由哪些模块组成?
关键字:官方文档描述,由7个模块组成
主要包括以下常用的5个模块:
Core:核心模块
Testing:测试模块
Data Access:数据访问模块
Web Servlet:基于Servlet的Web应用开发
Integration:企业级系统集成模块(不同系统之间的交互集成)
Spring IOC(控制反转)
关键字: IOC 名词解释,作用是解耦,使用 IOC 容器管理项目组件之间的耦合关系
解耦高内聚,低耦合编程思想硬编码实现解耦:
1.不要直接new对象,通过反射创建
2.将需要创建的对象独立保存在资源文件中,动态加载
IOC是Spring框架的核心思想之一,主要用于解耦。IOC是指创建对象的控制器转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合关系,实现解耦。
控制:指的是对象创建(实例化、管理)的权力
反转:控制权交给外部环境(spring框架、IOC 容器)
Spring IOC容器
关键字: IOS 容器的作用,存储形式,初始化过程
IOC容器其实就是一个Map,key是每个bean对象的ID,value是bean对象本身。IOC容器负责创建bean对象并管理bean的生命周期。并且根据配置好配置文件或注解,管理IOC容器中的每个bean,以及根据bean直接的依赖关系,完成bean之间的注入。
IOC容器属于Spring Core模块,用来创建和管理Bean,默认使用单例的方式将bean存储在DefaultListableBeanFactory类的beanDefinitionMap中(一个 ConcurrentHashMap 类型的Map集合);
IOC容器使用ConcurrentHashMap集合存储了BeanDefinition对象,该对象封装了Spring对一个Bean所有配置信息,包括:类名,属性,构造方法参数,依赖,是否延迟加载,是否是单例等配置信息;
//1.创建工具类
Properties properties = new Properties();
//2.加载文件
InputStream inputStream = Test01.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(inputStream);
//3.通过key获取value
String driver = properties.getProperty("msg1");
String url = properties.getProperty("msg2");
String name = properties.getProperty("msg3");
String pwd = properties.getProperty("msg4");
//4.获取连接
Class.forName(driver);
Connection root = DriverManager.getConnection(url,name,pwd);
Spring DI
DI是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。
作用
将spring IOC容器所创建的各个组件,使用DI的语法进行关联,耦合(胶水)
bean
Bean代表被IOC容器管理的对象。
通过配置文件或注解,告诉IOC容器帮助我们管理哪些对象。
声明类为Bean的注解
@Component: 定义通用Bean的注解,可标注任意类为Bean。如果一个Bean不知道属于哪个层,可以使用@Component注解标注。
@Repository:定义数据访问层Bean的注解。
@Service:定义业务层Bean的注解。
@Controller:定义控制器Bean的注解。
@Component和@Bean的区别
@Component注解作用于类,而@Bean注解作用于方法。
@Component通常是通过类路径扫描来实现自动扫描并完成装配Bean到Spring IOC容器。
@Bean注解通常用于注解某个方法,通过@Bean注解告诉了Spring IOC容器,该方法的返回值实例是一个Bean。
Spring IOC容器对Bean管理
一.bean实例化
1.通过构造方法(默认)
2.通过工厂方法
3.通过静态工厂方法
二.bean作用域
含义:spring对于创建javaBean实例的方式
语法:
<bean scope="属性值"></bean>
属性值:
singleton=====>单例(默认)
prototype=====>多例
request=======>一个请求创建一个
session=======>一个会话创建一个
三.bean生命周期
1.实例化
2.属性赋值(DI)
3.初始化
3.1接口 InitializingBean
3.2属性 init-method=“”
4.操作使用
5.销毁
5.1接口 DisposableBean
5.2属性 destory-method=“”
Spring的配置
Spring2.5前 == xml
Spring2.5后 == xml+annotation
Spring3.0后 == annotation+JavaConfig配置类
lombok插件 | dbUtil | junit测试 |
---|---|---|
idea安装插件 | 核心类:QueryRunner | 1.坐标 |
添加坐标 | .query() 查询 | 2.注解 |
编写注解 | .update() 增删改 | @Test @Before @After |
代理
定义
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用
静态代理
静态代理是由程序员创建或特定工具自动生成源代码,在对其编译。
在程序员运行之前,代理类.class文件就已经被创建了。
动态代理
动态代理是在程序运行时通过反射机制动态创建的。
动态代理分为:
基于接口的动态代理(jdk自带)
基于子类的动态代理(第三方)
AOP(面向切面编程)
将那些与业务无关,却为业务模块所共用调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性;
Spring AOP 基于动态代理实现:
如果被代理的对象,已经实现某个接口,则Spring AOP 会使用JDK Proxy(反射),基于接口的方式,创建代理对象(JDK动态代理的核心是InvocationHandler接口和Proxy类);
如果被代理的对象,没有实现某个接口,就无法使用JDK Proxy去进行代理,这时候Spring AOP会使用Cglib,基于继承的方式,生成一个被代理对象的子类来作为代理(Cglib动态代理的核心是MethodInterceptor接口和Enhancer类);
AOP通知类型
前置通知(Before)
返回通知(After-returning)
异常通知(After-throwing)
后置通知(After)
环绕通知(Around)
AOP连接点
AOP将所有的方法都视为连接点
AOP切点
切点是AOP中的一个核心概念,它定义了哪些连接点(join point)应该执行某个切面(aspect)
AOP目标对象
目标对象是指实际执行业务逻辑的对象。
AOP织入
AOP切面:切点+通知