Spring(五) 依赖查找
依赖查找方式
单一类型依赖查找接口BeanFactory
根据Bean名称查找
getBean(String beanName)
Spring 2.5覆盖默认参数: getBean(String,Object...)
根据Bean类型查找
实时查找
Spring 3.0 getBean(Class)
Spring4.1覆盖默认参数: getBean(Class,Object...)
延迟查找
getBeanProvider(Class)
getBeanProvider(ResolvableType)
根据Bean名称+类型查找 getBean(String,Class)
集合类型依赖查找接口 ListBeanFactory
根据Bean类型查找
获取同类型Bean名称列表
getBeanNamesForType(Class)
Spring 4.2 getBeanNamesForType(ResolvableType)
获取同类型Bean实例列表
getBeansOfType(Class)以及重载方法
根据注解类型查找
Spring 3.0 获取标注 ...
Spring(二)-AOP
参考文献
路人甲-Spring系列
AOP
AOP是一种编程范式,通过将横切关注点(如日志记录、安全性检查等)与核心业务逻辑进行分离,可以使代码更加模块化、可维护性更高.
Spring框架中的AOP模块提供了一种方便的方式来实现AOP,它采用了动态代理和字节码增强技术,可以在运行时动态地将切面逻辑织入到目标对象的方法中,从而实现AOP的目的.
Aspect-Oriented Programming,意为面向切面编程.
作用:在程序中具有公共特性的某些类/某些方法上进行拦截, 在方法执行的前面/后面/执行结果返回后增加执行一些方法.
AOP相关概念
目标对象(target): 目标对象将要被增强的对象,即包含主业逻辑的类对象.
连接点(join point): 连接点,程序运行的某一个点,比如执行某个方法,在Spring AOP中join point总是表示一个方法的执行.
代理对象(proxy): AOP中会通过代理的方式,对目标对象生成一个代理对象,代理对象中会加入需要增强功能,通过代理对象来间接的访问目标对象,起到增强目标对象的效果.
通知(advice) ...
Spring(二) Inversion of Control (IoC)
参考文献
什么是IoC?
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法;
将对象的创建和组装的主动控制权都交给Spring容器来完成,使用这只需要从Spring容器中查找需要的使用的对象.
主要是为了降低系统代码的耦合度,让系统利于维护和扩展.
Spring容器主要负责容器中对象的创建,组装,对象查找,对象生命周期的管理等等操作.
IoC容器的职责
实现与执行的任务之间要解耦;
实现bean的管理,让应用程序不用过渡关注bean的生命周期以及依赖;
IoC容器是具有依赖注入功能的容器,负责对象的实例化,对象的初始化,对象和对象之间依赖关系配置,对象销毁,对外提供对象的查找等操作,对象的整个生命周期都是由容器来控制.
通用职责
依赖处理
依赖查找
依赖注入
生命周期管理
容器的生命周期(启动,停止…);
托管的资源(Java Beans或其他资源的生命周期);
配置
容器的配置
外部化配置
托管的资源(Java Beans或其他资源)
如何实现IoC?
IoC主要实现策 ...
Spring-面试题
什么是Spring Framework?
Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度.
它是轻量级、松散耦合的.
Spring核心主要两部分:
IOC - 控制反转
AOP - 面向切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚.
Spring Framework有哪些核心模块?
spring-core: Spring基础API模块,如资源管理,泛型处理;
spring-beans: Spring Bean相关,如依赖查找,依赖注入;
spring-aop: Spring AOP处理,如动态代理,AOP字节码提升;
spring-context: 事件驱动,注解驱动,模块驱动等;
spring-expression: Spring表达式语言模块;
什么是IoC?
IoC是反转控制,类似好莱坞原则,主要实现有依赖注入(DI)和依赖查找;
IoC: 将类的对象的创建交给Spring容器来管理创建
DI: 将类里面的属性在创建类的过程中给属性赋值
依赖查找和依赖注入的区别?
依赖查找是通过容器或上下文来查找所需的依赖关系,并将其注入到所需的 ...
Spring(一) SpringFramework总览
参考文献
小马哥讲Spring核心编程思想
核心特性(Core)
IoC容器(IoC Container)
Spring事件(Events)
资源管理(Resources)
国际化(i18n)
校验(Validation)
数据绑定(Data Binding)
类型转换(Type Conversion)
Spring表达式(Spring Express Language)
面向切面编程(AOP)
数据存储(Data Access)
JDBC
事务抽象(Transactions)
DAO支持(DAO Support)
O/R映射(O/R Mapping)
XML编列(XML Marshalling)
Web技术
Web Servlet技术栈
Spring MVC
WebSocket
SocketJS
Web Reactive 技术栈
Spring WebFlux
WebClient
WebSocket
技术整合(Integration)
远程调用(Remoting)–(同步)
Java RMI
基于Hessian协议
Java消息服务(JMS)–( ...
Spring(六) 依赖注入
参考文献
Autowiring Collaborators
依赖注入(Dependency injection,DI)
表示Spring容器中创建对象是给其设置依赖对象的方式,通过某些注入方式可以让系统更灵活.
依赖注入模式和类型
手动模式
配置或编程的方式,提前安排注入规则
XML资源配置元信息;
Java注解配置元信息;
API配置元信息;
自动模式
实现方提供依赖自动关联的方式,按照内建的注入规则
Autowiring(自动绑定)
依赖注入的类型
依赖注入类型
配置原数据举例
setter方法
<proeprty name=“user” ref=“userBean”/>
构造器
<construcot-arg name=“user” ref=“userBean”/>
字段
@Autowiredprivate User user
方法
@Autowired public void user(User user){…}
接口回调
class MyBean implements BeanFactoryAwar ...
Spring(八) Bean生命周期
参考文献
北京某大公司:SpringBean生命周期
深究Spring中Bean的生命周期
小马哥讲Spring核心编程思想
一文读懂 Spring Bean 的生命周期
如何记忆 Spring Bean 的生命周期
Spring系列-路人甲Java
普通Java对象实例化过程
Java源码被编译为class文件;
等到类需要被初始化时(比如说new,反射等);
class文件被虚拟机通过类加载器加载到JVM;
初始化对象供我们使用;
Spring Bean生命周期13个环节
阶段1: BeanDefinition配置阶段
是指在Spring IoC容器中注册一个BeanDefinition对象,而不是Bean的定义本身
Bean信息定义4中方式
API的方式
XML的当时
Properties文件的方式
注解方式
阶段2: BeanDefinition注册阶段
阶段3: BeanDefinition对象解析阶段
BeanDefinition对象的解析主要有3种方式
XML文件定义Bean的解析: XmlBeanDefiniti ...
Spring源码-分析(Spring5.1.x)
Spring源码分析(Spring5.1.x)
参考文献
《轻松读懂spring》之 IOC的主干流程(上)
入口
Spring容器的顶层接口是:BeanFactory,但我们使用更多的是它的子接口:ApplicationContext.
通常情况下,如果我们想要手动初始化通过xml文件配置的spring容器时,代码是这样的:
12ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");User user = (User)applicationContext.getBean("name");
如果想要手动初始化通过配置类配置的spring容器时,代码是这样的:
12AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.clas ...