第四章 IoC容器

Q1 如何理解控制反转(IoC)的概念?
Q2 如何理解依赖注入(DI)的概念?
Q3 控制反转可以划分为哪些类型?其中,Spring框架支持哪些类型?
Q4 谈谈对Java反射技术的理解。
Q5 例举反射类型并说明。
Q6 Java类装载器(classloader)有哪几种?
Q7 Java类装载器(classloader)有哪些重要方法?
Q8 如何理解JVM装载类时使用的“全盘负责委托机制”?
Q9 编程 :使用Java反射技术,设置一个类、一个对象并实例化、并将该对象设置三个属性。
Q10 Resource接口有哪些主要方法?有哪些主要实现类?
Q11 ResourceLoader接口有哪个方法?有哪些主要实现类?
Q12 Spring框架支持哪些资源类型的地址前缀?地址前缀classpath:和classpath*:有什么区别?
Q13 描述WebApplicationContext的初始化过程。
参考:https://blog.csdn.net/u012385190/article/details/81368172
Q14 解释ssm项目中的web.xml文件代码。
Q15 描述bean的生命周期。当作用域不同时,bean的生命周期有何不同?
Q16 可以在后处理器中“篡改”属性值吗?

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
答案:
Q1:
1 概念:即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由Spring容器借由Bean配置来进行控制。
2 思想:IoC模式是工厂模式的升华,可以把IoC容器看作是一个大工厂。
3 反射:IoC能通过bean配置完成反转,利用了Java的反射技术。
4 作用:降低程序耦合。

Q2:
https://files-cdn.cnblogs.com/files/stono/DependencyInjection.pdf

http://martinfowler.com/articles/injection.html

Q3:
1 构造函数注入(Spring支持)
2 属性注入(Spring支持)
3 接口注入

Q4:
1 概念:在程序运行时,动态地获取类的结构信息(包括类、对象、属性、方法等)。
2 几个重要的反射类有:
a Classloader 类装载器(全盘负责委托机制)
有三个装载器:根装载器(不是Classloader的子类)、扩展类装载器(是Classloader的子类)、应用类装载器(是Classloader的子类)
全盘负责委托机制:
“全盘负责”:当一个ClassLoader装载一个类时,除非显式地使用另一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入。
“委托机制”:委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。
b Constructor 构造函数反射类:
newInstance方法可以创建一个示例
c Method 方法反射类
invoke()方法
d Field 成员变量反射类
set()方法
e Class

Q5:见Q4

Q6:见Q4

Q7:
loadClass(): 制定需要装载类的名字
defineClass():将类文件的字节数组转换为JVM内部的JAVA.LANG.CLASS对象
findSystemClass():从本地文件系统载入Class文件
findLoadedClass():查看classloader是否已装入某一个类
getParent():获取父装载器

Q8:
见Q4

Q9:略

Q10
Resource主要方法:
Resource主要实现类:
ResourceLoader主要方法:
ResourceLoader主要实现类:

Q11

Q12
Spring 支持的前缀
1 classpath: 从类路径中加载资源
2 file: 使用UrlResource从文件系统目录中装载资源
3 http:// 使用UrlResource从Web服务器中装载资源
4 ftp:// 使用UrlResource从FTP服务器中装载资源
5 没有前缀 根据ApplicationContext的具体实现类采用对应类型的Resource

Q13
1、读配置文件节点–>2、创建ServletContext–>3、设置参数到Context中()–>4、监听listener()并执行初始化方法和销毁方法。
https://blog.csdn.net/u012385190/article/details/81368172
https://blog.csdn.net/bai_bug/article/details/80218202

Q15 生命周期:
1 实例化bean对象
2 设置对象属性
3 BeanNameAware接口:工厂调用Bean的setBeanName()方法传递Bean的ID。
4 BeanFactoryAware接口:工厂调用setBeanFactory()方法传入工厂自身
5 将Bean实例传递给Bean的前置处理器的postProcessBeforeInitialization(Object bean, String beanname)方法
6 调用Bean的初始化方法
7 将Bean实例传递给Bean的后置处理器的postProcessAfterInitialization(Object bean, String beanname)方法
8 使用Bean:如果是singleton,则调用Spring缓存池中准备就绪的bean;如果是prototype,则将准备就绪的bean交给调用者。
9 销毁bean

作用范围为singleton和prototype的bean的不同:
singleton:默认值;容器初始化时创建bean实例,在整个容器的生命周期内只创建这个bean;单例的;bean返回给调用者Spring不再管理。
prototype:原型的; 容器初始化时不创建bean实例,而在每次请求时都创建一个新的bean实例并返回;bean放入Spring IoC容器的缓存池中并将bean引用返回给调用者。

Q16 可以。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值