spring容器初步


自定义spring框架

1. 传统业务编码方式的缺点
	1. 对象的创建和对象的使用强耦合,违反了对修改封闭,对扩展开放的封闭原则,代码可扩展性变差
		1. spring引入了IOC和DI,解决了对象创建的问题
			1. IOC:对象使用者将对象创建的权力移交给框架
			2. DI: 框架在创建对象的过程中自动完成对象属性的装配

	2. java面向对象编程的三大特性,封装、继承、多态使JAVA代码衍生了面向接口编程的纵向代码结构,但是对于通用的功能,如事务,日志等,存在重复编码的缺点
		1. spring引入AOP横切解决通用功能的融入问题,AOP的实现方式为动态代理
2. 自定义spring框架的思路
	1. IOC的实现,启动时即通过配置文件定义到需要创建对象的类,使用单例模式创建对象后放入全局map
	2. 配置文件中定义id和类的全路径名,通过反射生成对象,构建id-object的k-v结构存入map

springIOC高级特性与源码解析

1. beanFactory和ApplocationContext的关系
	1. 这两个类都是描述容器对象的,其中beanFactory是容器的顶级接口,定义了容器的规范
	2. applicationContext是具体实现,分为多种实现模式,对应多种启动容器和创建bean的方式
2. springIOC容器启动的三种方式
	1. 纯xml模式,使用ClassPathXmlApplicationContext/FileSystemXmlApplicationContext来加载xml文件并解析
	2. xml+注解模式,xml文件中声明需要扫描的注解包
	3. 纯注解模式,使用AnnotationConfigApplicationContext来加载配置类,并通过配置注解扫描加载包路径的bean
3. DI依赖注入,主要分为两种方式
	1. xml模式,通过bean中的property子标签来进行属性装配
	2. 注解模式,通过@Autowired(spring),@Value, @Resource(jdk,11已默认移除)等注解完成装配
4. Lazy-init懒加载
	1. 默认bean都是即时加载,可以通过标签或者注解配置未懒加载,不过只针对于单例模式,因为原型模式都是懒加载的
5. springIOC容器中的bean创建的两种方式
	1. 普通bean,调用构造器创建
	2. 工厂bean,又称FactoryBean,通过工厂方法创建,
		1. xml中,通过设置class为工厂类,并配置factory-method工厂方法属性,能够创建工厂bean
		2. 注解中,通过@Configuration+@Bean注解,被注解的方法称为工厂方法,返回对象称为工厂bean,注解方式在springboot开发中通常用于生成框架组件对象
6. SpringBean的生命周期
	1. bean信息装配阶段
		1. 实例化bean
		2. 设置属性值-依赖注入(工厂bean创建的对象一般都已经设置了属性值)
		3. 三个接口实现,用于获取信息,(可实现可不实现,通常不建议实现,会导致耦合)
			1. BeanNameAware接口,实现setBeanName方法获取bean名称
			2. BeanFactoryAware接口,实现setBeanFactory方法获取bean的创建工厂(通常bean都是通过一个默认的工厂创建的)
			3. ApplicationContextAware接口,实现setApplicationContext方法获取bean所属的容器对象
	2. 后置处理阶段
		1. spring提供了后置处理器,分别针对bean和beanFactory
			1. BeanPostProcessor
			2. BeanFactoryPostProcessor
		2. 后置方法执行顺序
			1. beanPostProcessor的postProcessBeforeInitialization方法
			2. @postConstruct注解方法
			3. 实现InitializingBean接口,实现afterPropertiesSet方法
			4. xml中定义的init-method方法
			5. beanPostProcessor的postProcessAfterInitialization方法
	3. 完成阶段
		1. 原型模式直接交给调用者
		2. 单例模式放入缓存池-IOC容器
	4. 销毁阶段 --只针对单例模式singleton
		1. @PreDestroy注解方法
		2. 实现DisposableBean接口,实现destroy方法
		3. xml中定义的destroy-method方法

springAOP

1. AOP代理类的创建过程
	1. 目标类先完成实例化,在执行到beanPostProcessor后置处理器的postProcessAfterInitialization方法时(bean对象创建的最后一步)生成代理对象,然后将代理对象放入单例池
	2. 生成时默认优先选择jdk动态代理,不满足条件或显式设置强制cglib时使用cglib动态代理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值