解读spring底层原理

spring底层实现原理

1. 什么是aop??
与oop(面向对象相比)相比较,传统的oop开发的代码逻辑是自上而下的,这些自上而下的过程会产生横切性问题。而这些横切性问题又与我们的主业务逻辑关系不大。
aop的编程思想是就是把这些横切性的问题和主业务逻辑进行分离,从而达到解耦的目的。
应用场景:日志管理,事务管理

技术本质: 如果代理对象不是接口则使用cglib proxy, 如果是接口则使用的是java proxy动态代理
代理发生在什么时候?
在初始化的时候进行代理的

为什么java 动态代理必须是接口?
在这里插入图片描述
因为java是单继承多实现,它已经继承了Proxy,则只能代理接口。

2. IOC容器?
IOC也称为依赖注入(dependency injection, DI) 它是一个对象定义依赖关系的过程,也就是说,对象只通过构造函数参数对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义它们所使用的其它对象,然后容器在创建bean时注入这些依赖,这个过程本质上是bean本身的逆过程,因此称为控制反转(ioc),通过直接构造来控制依赖项的实例化。

统一bean的构建,并自动维护bean的依赖关系实质上就是一个map

过程:
1.Ioc容器创建所有的bean
2.创建bean注入其依赖bean

spring注册Bean的原理解析

在这里插入图片描述
在此要注意两个接口:BeanDefinition和BeanDefinitionRegistry接口

BeanDefinition: bean定义 ,承载bean属性。
BeanDefinitionRegistry: bean定义注册器 ,bean的id作为key存map,id —BeanDefinition
在这里插入图片描述
AliasRegistry(别名注册器): bean的name作为key注册
BeanDefinitionReader(Bean定义读取):读取配置文件
在这里插入图片描述
BeanDefinitionReader存在的方法:
在这里插入图片描述
BeanFactory(Bean工厂):生产bean
在这里插入图片描述
在这里插入图片描述
DefaultListableBeanFactory此类实现了注册器和BeanFactory

了解上述的接口,我们就可以写中间件,常见的中间件有mybatis-spring等,实现其后置处理器。
主要流程图:
在这里插入图片描述

在bean的创建过程中,ioc做了什么事情?

(1)IOC底层是怎么判断返回FactoryBean或者返回getObject?
在这里插入图片描述
refresh():容器启动的方法
在这里插入图片描述

读取配置文件:xml方式
ApplicationContext context = ClassPathXmlApplicationContext();
context.getBean(user);

注解开发:
@Configuration: 使用在类名上面,告诉spring这是一个配置类。
@Bean : 使用在方法上,给容器中注册一个Bean, 类型为返回值的类型,id默认使用的是方法名, 当然可以在Bean(“person”)中指定id名称。
xml文件配置:

包扫描:只要标注了@Controller, @Service, @Repository,@Component

xml文件配置方式:<context:component-scan base-package=“com.learn”></context:component-scan>

注解方式:@ComponentScan(value=“com.learn”,excludeFilters={
@Filter(type=FilterType.ANNOTATION , classes={Controller.class, Service.class})
} )

value:指定要扫描的包是lcom.learn

excludeFilters: 指定要过滤的组件, 类型为Filter[]数组,指定扫描的时候按照什么规则排除那些组件。
includeFilters = Filter[] 指定扫描的时候只需要包含哪些组件。
type:指定过滤的规则;
FilterType.ANNOTATION: 按照注解
classes:过滤的哪些类型组件

后续继续更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值