前言
??如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 ??而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
java 面试知识点突击-(41-50)
41 如何实现一个IOC容器的思路?
- 配置文件、配置包扫描路径;
- 递归包扫描,获取.class文件信息;
- 反射、确定需要交给IOC管理的类;
- 对需要注入的类进行依赖注入;
42 spring 是 什么?
轻量级的 控制反转(IOC)和面向切面(AOP) 的框架,用来装javaBean,中间层框架(起连接作用)。
- 大小和开销方面都是轻量级的;
- 通过IOC实现松耦合,不需要对象之间进行长依赖,降低代码之间的耦合性;
- AOP提供了面向切面编程的丰富支持;
- 包含并管理应用对象 bean的生命周期;
- 将简单的组件配置,组成复杂的应用;
43 对 spring AOP的理解?
AOP:面向切面编程,目的是为了解耦 即将程序中的交叉业务逻辑(日志、事务、安全等)封装成切面注入到对象(业务逻辑)中去。 概念: 1、切面 使用@Aspect 声明一个切面 2、建言 使用@before,@After,@Around等注解建立建言 建言执行顺序: 当同一个方法被多个注解了@Aspect的类拦截时,可以通过@Order指定Aspect类的执行顺序,此时的执行顺序为: 3、切点 拦截规则为切点(PointCut) 4、连接点 符合条件的每一个连接处
44 对spring IOC 的理解?
依赖注入 :一种设计思想(IOC就是典型的工厂模式。)
指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合。 即由Ioc容器来控制对 象的创建。
对IOC的理解主要有三个方面:容器概念、控制反转、依赖注入
44::01 容器概念
第一步(存):用来存放java中各种对象(javaBean),实际上就是一个BeanDefinitionMap<beanName,BeanDefinition>(生成各种class的bean定义)[beanDefinition对象(描述bean实例化的各个属性)]
第二步(用):在通过DI(依赖注入),把属性往对象里面注入,即给对象赋值。
44::02 控制反转
全部对象的控制权全部由IOC控制,对象与对象之间没有直接联系,可以比喻成粘合剂。
44::03 依赖注入
实现控制反转的手段,依赖注入是实现IOC的方法。 即获得依赖对象的过程由自身管理变为由IOC容器主动注入。
45 spring IOC 为什么是控制反转的?
因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象。
46 BeanFactory和ApplicatinContext有什么区别?
- ApplicatinContext是BeanFactory的子接口;
- ApplicatinContext所提供的功能比BeanFactory要多,如:提供在监听器中注册bean事件、统一的资源文件访问方式、同时加载多个配置文件、载入多个上下文等等…;
- BeanFactory采用延迟加载的方式,只有使用的时候该bean才会实例化,
而ApplicatinContext是在容器启动的时候,一次性创建所有的bean; - ApplicatinContext不足的地方是占用内存空间,启动比较慢;
- BeanFactory通常是用编程的方式来实现,而ApplicatinContext还能以声明式的方式来实现;
- BeanFactory手动注册,ApplicatinContext是自动注册;
47 描述一下 spring bean的生命周期?
准备: 1)、解析类得到BeanDefinition(bean定义); 2)、如果有多个构造方法,那么推断构造方法; 3)、确定构造方法,实例化,得到bean对象; 4)、对对象中加了@Autowired注解的属性进行依赖注入(属性填充); 5)、回调aware方法,比如BeanNameAware、BeanFactoryAware; 6)、调用BeanPostProcessor的初始化的前方法【后置处理器的前处理】.; 7)、调用初始化方法; 8)、调用BeanPostProcessor(英:bean+post+p+rou+cai +ser)的初始化的后方法,在这里进行AOP(动态代理的创建); 9)、如果当前创建的bean是单例,则会把bean放入单例池中。; 使用: 10)、使用bean; 11)、spring 容器关闭时,调用DisposableBean 中的的destory()方法销毁;
48 解释一下spring支持的几种bean的作用域?
7种,默认的是单例模式(singleto), 即每个容器中只有一个bean的实例,单例模式由BeanFactory自身维护,生命周期与IOC一致。
prototype模式:每次注入,都会创建一个新的对象,即在容器中就有多个实例;
request模式: 每个http请求中创建一个单例对象,即在单个请求中复用这个单例对象;
session模式: 确保每个session中有一个bean的单例实例对象,session过期后,bean随之消失;
application模式: bean被定义为ServletContext(Servlet容器,不是spring容器)的生命周期中复用一个单例对象,就可以跨IOC容器;
websocket模式:bean被定义为websocket的生命周期中复用一个单例对象;
还有一个global-session模式:全局session作用域,不过现在不怎么用了。
49 spring 框架中的单例Bean是线程安全的吗?
不安全。 默认状态,spring的bean 是单例模式,框架并没有对bean进行线程安全的处理。
当 bean有状态时,即有数据存储功能; 是线程不安全的,使用prototype模式,即每次注入,都会创建一个对象,即new Bean 就可以解决这个问题,或者其他操作。 例子:
Dao层操作数据库Connection,Connection是带有状态的,比如数据库事务,
Spring 的事务管理器使用ThreadLocal为不同的线程维护了一个独立的Connection副本
当bean无状态时,即无数据存储功能,是线程安全的;
50 Spring 框架中都用到哪些设计模式?
简单工厂;由一个工厂类根据传入的参数,动态决定应该由哪一个产品 Spring 中的 BeanFactory
工厂方法: 实现了FactoryBean接口的bean是一类叫做factory的bean
单例模式: spring中的bean
装饰器模式:动态地给一个对象添加一些额外的职责。 spring 中凡是类名包含Wrapper和Decorator
动态代理: Spring AOP
观察者模式: spring中监听器
策略模式: spring框架中访问Resource接口
创作不易、点关注、不迷路
点击主页、更精彩 !!!
|