文章目录
Spring
概述:Spring是轻量级的开源的JavaEE框架
- Spring可以解决企业级应用开发的复杂性
- 是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。
- 常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。
spring框架的主要特点:
- 控制反转 IOC:spring框架创建对象,管理对象,以及管理对象之间的依赖关系。
- 依赖注入 DI :通过构造函数,或者set方法,给对象的属性赋值。IOC就是通过DI来实现的。
- Bean:java类型,由spring框架创建的对象,就被称为bean
- 面向切面编程 AOP
spring的两个核心部分:IOC、AOP
IOC(控制反转):把创建对象和对象之间的调用的过程,交给Spring进行管理。从而降低耦合度。
在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。
所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
-
IOC底层原理
-
xml解析、工厂模式、反射
-
IOC的过程:
1、第一步 配置XML文件,配置创建的对象。
<bean id=”dao” class = “com.hwl.UserDao”></bean>
2、第二步 有service类和dao类,创建工厂类
class UserFactory{ public static UserDao getDao(){ String classValue = class属性值; //xml解析 //通过反射创建对象 Class classz = Class.forName(classVlue); return (UserDao)classz.newInstance(); } }
-
IOC的本质:就是基于IOC容器完成,IOC容器底层就是对象工厂。
-
-
IOC接口(BeanFactory)
-
IOC操作(基于xml)
-
IOC操作(基于注解)
AOP:面向切面,不修改源代码的情况下,进行功能的增强。
概念:面向切面编程。意为:在不修改源代码的情况,进行功能的增强。
-
面向切面编程(方面),利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
-
通俗的描述:不通过修改源码的方式,在主干功能里面添加新的功能。
-
使用登录的例子说明AOP
例如:现在有一个登录功能,用户输入账号面就可以登录,但是该用户是一个新用户,如果现在需要添加一个注册功能,按照之前的逻辑,就需要在,源代码的上面去进行功能的添加,同时代码量也会增加,但是如果利用aop的思想,我们就可以在登录方法前或者后,添加注册功能,同时两个模块互不干扰,从而也可以降低耦合度。
-
实现AOP的两种方法:
- 动态代理有接口的情况:创建接口实现代理对象,增强类的方法。
- 动态代理没有有接口的情况:使用CGLIB动态代理。创建子类的代理对象,增强类的方法。
AOP术语
- 首先通知分为多种类型
- 前置通知:Before
- 后置通知:After
- 环绕通知:Around
- 异常通知:After Throwing
- 最终通知:finally
spring容器
spring容器是什么?
简单来说,Spring容器是用来装Spring Bean的。
在Spring中,所有的java对象均交由Spring容器使用DI(dependency injection)来进行托管,在需要时进行调用,并维护其生命周期。
所以,我们看到Spring容器和Spring bean是一种包含的关系,容器装载并维护着bean。
Spring中的容器是不唯一的,但大体上包括两个:BeanFactory和ApplicationContext
-
这两者都能,加载配置文件,通过工厂的这个过程,去创建对象
1、BeanFactory:
- 也就是我们一直说的IOC容器,管理Bean的工具。
- ICO容器基本实现。
- 是spring内部的使用接口,一般不提供开发人员进行使用。
2、ApplicationContext:
- 它是BeanFactory接口的子接口,提供更多更强大的功能。(一般由开发人员进行使用)
两者之间的区别:
- BeanFactory,在记载配置文件的时候不会创建对象,而是在使用的时候才回去创建对象。
- ApplicationContext,在加载配置文件的时候,就会把配置文件中的对象进行创建。
bean标签的属性设置
-
id : bean的唯一标志
-
class :bean的类型
-
factory-method :调用工厂方法,创建对象
-
factory-bean :调用创建对象的bean , 然后再factory-method 设置需要调用的具体的方法。
-
scope:
<!-- 通过scope设置bean对象时单例还是非单例: prototype : 非单例, 每次获取到的对象都是一个新的对象。 singleton :单例, 容器创建好这个对象之后,每次你使用都是同一个对象。 -->
<