面试浅谈之spring(一)

来说说什么是spring
  • spring是java企业的开源框架
  • 更轻量
  • 控制反正,实现松耦合
  • 面向切面编程,把业务逻辑和系统服务分开
  • 包含管理应用对象中的生命周期和配置
  • 提供MVC框架
  • 提供持续的事务管理接口,可以拓展上至本地事务,下到全局事务
  • 提供方便的API把具体技术相关的异常转换为一致的unchecked异常

进入主题:

AOP

面向切面编程,在不修改原代码的基础上增加新功能

功能就不一一举例,感兴趣自己搜一下哈

AOP底层实现
  • JDK动态代理(实现接口时使用)
  • CGLIB动态代理(没有实现接口时使用)

JDK动态代理与CGLIB动态代理的区别

  • JDK动态代理是利用反射机制生成一个实现代理的匿名类,在调用具体方法前调用InvokeHandler来处理
  • CGLIB动态代理是利用asm开源包,对代理对象类class文件加载进来,通过修改字节码生成子类处理
IOC

控制反转,将对象交给Spring容器进行控制管理,而不再是以往的对象内部直接控制

IOC这一块有兴趣的自己搜一下哈,我这边没有太多的总结

DI

依赖注入,自身对象中的内置对象通过注入的方式创建

依赖注入的方式

1、构造方法注入

  • 需要在构造方法上声明所依赖的参数列表,让Spring知道你需要依赖哪些东西。

  • 优点:对象在构造完成之后,即已进入就绪状态,可以马上使用。

  • 缺点:当依赖对象比较多的时候,构造方法的参数列表会比较长,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多个构造方法,而参数数量的变动可能造成维护上的不便。

2、setter方法注入

  • 将所需要依赖的属性,生成符合规范的set方法。

  • 优点:方法可以命名、setter方法可以被继承、允许设置默认值。

  • 缺点:就是对象无法在构造完成后马上进入就绪状态

3、接口注入

  • 从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,基本处于“退 役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter 方法注入则不需要如此。
Spring框架中Bean的生命周期
  • 从XML中读取bean定义,并实例化bean
  • 根据bean的定义填充属性
  • 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。
  • 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
  • 如果有任何与bean相关联的BeanPostProcessors,Spring会postProcesserBeforeInitialization()方法内调用它们。
  • 如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
  • 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
  • 如果bean实现了 DisposableBean,它将调用destroy()方法。

好了,今天就先到这里吧 累了,下次什么时候想起来 什么时候来写一篇文章

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值