Spring基础
Spring基础
IOC:
-
一种控制反转思想,
- 讲对象的创建和对象直接的调用,交给Spring管理;
- 主要目的:为了降低模块之间的解耦;
- 原始是直接new 创建,
- 进阶是工厂模式;
- 终结模式,IOC,控制反转实现;
-
底层主要功能原理:
- Xml解析;
- 工厂模式【解耦合】;
- 反射;
-
xml配置文件:
使用< >进行配置,然后使用xml解析吗,获取其中的值:
<bean id = "" class = "全类名"></bean>- 使用id作为实例键名【k-v容器】,
- 全类名通过反射,Class.forName("").newInstance(),获取值;
-
IoC是基于IOC容器实现,容器底层就是对象工厂,IoC容器的两种接口;
- BeanFactory:IoC基本实现,Spring内部实现,不提供开发人员;
- 加载配置文件的时候,不会创建对象,再获取对象的时候,才会获取【懒汉模式】
- 主要实现类:
- ConfigrableApplicationContext:扩展功能;
- ApplicationContext:BeanFactory的子接口,提供更强大的功能;
- 饿汉模式:加载配置文件的时候,会对对象进行创建;
- 主要实现类:
- FileSystemXmlApplicationContext:使用的是磁盘路径;
- ClassPathXmlApplicationContext:使用的类路径;
- BeanFactory:IoC基本实现,Spring内部实现,不提供开发人员;
-
Bean管理:
-
Spring创建对象:
-
Spring属性注入:
-
两种方式实现以上两种功能;
-
基于xml配置文件方式实现:
-
创建对象:
使用bean标签:<bean id = "" class = "全类名"></bean>
- id:唯一标识;
- class:类的全路径;
- 默认是无参对象创建;
-
注入属性:
DI:依赖注入;
-
有参构造注入:
<bean id = "" class = "全类名"> <constructor-arg name = "" value = ""> </constructor-arg > <constructor-arg name = "" value = ""> </constructor-arg > // 调用对应的有参构造方法 </bean> -
set方法注入:
<bean id = "" class = "全类名"> <property name = "" value = ""> </property> // 调用对应neme的set方法 </bean>
-
-
-
基于注解方式实现;
-
-
-
IOC的Bean管理;
-
普通bean,定义的类型,就是返回类型;
-
工厂bean(Factory Bean):定义类型,和返回类型可以不一致;
- 主要接口: FactoryBean接口,在接口中实现;
-
bean的作用域:单实例还是多实例;
- 默认是单实例对象;
- scope属性值:
- singleton:单实例,加载配置文件的时候,就创建对象;
- prototype:多实例对象,调用get方法的时候,才会创建对象;
- Requset和Ssession
-
bean的生命周期:
-
通过无参创建实例;
-
设置属性值【set方法】;
把bean传递给bean后置处理器【BeanPostProcessor接口】;
-
bean的初始化方法【进行配置, init-method = ""属性】;
把bean传递给bean后置处理器;
-
bean可以使用;
-
当容器关闭后,调用bean销毁方法【进行配置, destroy-method = "" 属性】 == > .close()【子接口ClassPathXmlApplicationContext有一个close()方法】;
- BeanPostProcessor接口主要方法:
- postProcessorBeforeInitialization();
- postProcessorAfterInitialization();
- BeanPostProcessor接口主要方法:
-
-
Bean管理的自动装配:
- 通过bean属性是手动装配;
- 自动装配属性 autowire:
- byName:根据属性的名称注入;
- byType:根据属性的类型注入;
-
Bean管理,引入外部属性文件;
- 通过${键值};
-
-
基于注解:
注解是代码的特殊标记,格式:@注解名称(属性名称 = "属性值", 属性名称 = "属性值");
-
作用对象;
-
注解是为简化Xml配置;
-
创建对象的注解,功能相同,创建Bean实例:
-
@Component:普通层;
-
@Service:业务逻辑层
-
@Controller:Web层
-
@Repository:DAO层;
引入依赖,开启组件扫描,在类上添加注解;
- 组件扫描:扫描对应的组件【包含哪些,不包含哪些】;
-
-
注解的方式,属性的注入;
- @AutoWired:根据属性类型装配
- @Qualifier:根据名称注入;
- @Resource:以上两种;
- @Value:不同类型注入;
-
完全注解开发;
-
使用配置类代替Xml配置
@Configuration
@ConponentScan(basePackages = {"", ""}),然后使用AnnotationConfigAppcalitionContext(SpringConfig.class)加载配置类
-
-
-
AOP:面向切面编程;
-
动态代理:
- 有接口实现的子类:
- JDK动态代理,创建接口类代理;
- 底层是通过反射实现,【对象,方法,参数】
- 无接口的类:
- CGLIB动态代理,创建当前子类的代理对象;
- 有接口实现的子类:
-
术语
-
连接点:类中的方法,因为增强的是方法;
-
切入点:实际增强的方法;
切入点表达式:execution(【权限修饰符】【返回类型】【类全路径】【方法名】(【参数列表】));
-
通知:增强的逻辑部位;
- 前置,后置,环绕,异常【catch】,最终【finally】;
-
切面:把通知应用到切入点的过程;
-
-
AOP操作:一般基于AspectJ;
-

浙公网安备 33010602011771号