* 在开发中遇到的类和类之间依赖关系,这种依赖关系导致了当我们缺少某个对象时,程序根本无法编译。
* 在我们实际开发中应该尽量避免此问题发生:
* 我们在开发中应该做到:编译时不依赖,运行时才依赖。
* 针对强依赖(高耦合)的解决办法:* 主要就是靠反射
* 当我们解决了耦合问题之后,会产生硬编码问题:
* 解决硬编码问题,就是使用配置文件
资源绑定对象:java.util.ResourceBundle
它就是用于读取资源文件的。
.properties后缀的文件就是资源文件(资源文件只有这一种)
它的使用特点是:1.只能用于读取,不能用于写入。2.它只能读资源文件,其他文件都读不了。3.它只能用于读取类路径下的,其他位置也读不了。
* ApplicationContext:
* 它是一个接口,可以用于根据bean的id获取对象。是我们在spring中较常用的获取对象的容器。
* 它在读取配置文件创建对象时,采用的加载策略是立即加载。(读完配置文件就创建对象)
* 它有两个实现类:
* ClassPathXmlApplicationContext:它只能读取类路径下的xml文件 一般使用此种方式
* FileSystemXmlApplicationContext:它能读取磁盘任意位置的xml文件
*
*
* BeanFactory:
* 它是spring中IOC的顶层接口,也是一个容器对象,使用此对象也能获取到bean。
* 它在读取配置文件创建对象时,采用的延迟加载策略。(什么时候用了,什么时候创建对象。)
``` 注入复杂类型结构相同,标签可以互换
spring管理bean的细节
创建Bean的对象的三种方式:第一种方式:采用默认无参构造函数创建对象。 用的最多的方式
注意:如果类中没有默认无参构造函数,将不能创建成功
第二种方式:通过工厂中的静态方法来获取对象
第三种方式:通过工厂中的实例方法来获取对象
Bean对象的作用范围:它是可以配置的,通过scope属性配置。
scope的取值:singleton:单例的(默认值) 单例情况:作用于整个应用。
prototype:多例的(整合struts2时,action必须的选项) 多例情况:每次用到时都会创建新的(作用范围就是一次使用过程中)
==================不常用的取值======================================
request:作用范围是一次请求
session:作用范围是一次会话
globalsession:作用范围是一次全局会话。
Bean对象的生命周期:
单例:出生:spring的容器一创建,对象就出生 活着:只要容器存在,对象一直在 死亡:容器销毁对象消亡
多例:出生:什么时候用什么时候创建 活着:只要在使用中,一直存在 死亡:当对象长时间不用,并且也没有其他对象引用时,会由java的垃圾回收器回收。
小细节:
很多时候写路径不能写相对路径例如"/src/index.jsp",因为src目录在硬盘中不存在,应该使用带盘符的绝对路径
spring中的bean默认是单例的,与struts2整合时需要使用多例