努力经营当下,直至未来明朗!
普通小孩也要热爱生活!
【面试重点关注:自己理解后的总结,而不是照本宣科】
① List/Map -> 数据存储容器
② Tomcat -> Web 容器


- 将对象存放到容器中的好处:将对象存储在 IoC 容器,相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。
- ⽽ new 对象的⽅式相当于,每次需要⼯具了才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,这就是 IoC 容器和普通程序开发的区别。
- 小结:容器:相当于仓库,持久;
new对象:用到才创建,用完就扔。
③ Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。
【面试题】简要说明IoC和DI的区别
1)概念:
IoC是控制反转,也就是反转对象的生命周期的控制方; DI是依赖注入(dependency injection),在程序运行期间,动态的将某中依赖引入到当前对象的行为/机制。
2)从广义上来说:IoC=DI,是从不同的维度来描述同一个问题,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
3)IoC是一个设计思路,DI是具体实现。
【补充】程序开发的基本规范:
① 和程序相关的所有地方不能出现任何中文。如:项目的目录不能出现中文,项目的名称不能出现中文
② 和代码相关的命名不能是拼音或汉字,一定是英文。
Spring项目的创建步骤:
1)创建一个Maven项目
2)添加Spring框架依赖(spring-context、spring-beans)【关键!】
3)创建启动类(这是非必要的,但是相当于一个单元测试)
添加Spring框架依赖
但是:是有可能导入失败的!
此时参考下面Maven项目导入jar包和设置国内源的方法。
1)配置好国内的Maven源
① File中的Settings和 Settings for New Projects… 都要进行设置

② -> 搜索maven,并进行该页面上相关设置

③ -> 使用VSCode打开对应目录下的settings.xml文件,并找到mirrors进行修改配置(建议配置阿里云镜像)
(如果没有settings.xml文件就自己添加,有的话千万不要覆盖)


④ 此时重新reload就行
2)如果还是错误,删除本地maven仓库的jar包并重新下载:【目前本地仓库的jar包可能是不完整的jar包】
File -> Settings -> 搜索Maven -> 找到路径,打开该目录并删除所有文件 -> 然后reload就行

3)如果reload之后还是错误,重复1)2)步骤至少三次!
4)如果还是错误,就可能是以下问题:
① 上⾯的步骤没看仔细:重新认真的逐字逐句的观看和配置;
② Maven 路径中出现中⽂:如果出现中⽂会导致下载了 jar 包,但是在项⽬中不能正常使⽤;
③ 当前⽹络运营商有问题:当前所在区域连接的⽹络运营商(中国电信、移动…)连接数据源有问题,尝试更好⽹络,使⽤⼿机热点或朋友的⼿机热点尝试,如果还是还⾏,间隔 4 ⼩时之后再试。
先创建Bean对象:其实也就是创建一个类

将Bean对象存储到Spring中:通过xml来实现的
1)在resources中添加Spring配置⽂件 spring-config.xml:resources -> new -> File -> 命名没有特殊要求,但是尽量能够表明文件是啥(注意加上后缀!)

2)将Bean对象配置到Spring配置文件spring-config.xml中:id自己设(是bean对象的别名,不能重复),class是对象本身:包名.类名(没有包就直接类名即可)
【后期进行读取bean对象就是通过id进行获取到的】

ApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");// 这里的参数名字一定要和resources底下的xml文件名相对应!

② 使用BeanFactory:
BeanFactory context =new XmlBeanFactory(new ClassPathResource("spring-config.xml"));



③ 使用getBean方法,第一个参数是id,第二个对象是类对象.class。【最常使用】


5.【经典面试题】在得到Spring对象时有两种方式(ApplicationContext和BeanFactory),这两种方式有何区别?
1)相同点:
① 都可以得到Spring上下文对象
② 都是来自Spring的顶级接口
2)区别:
① 继承关系和功能:ApplicationContext属于BeanFactory的子类;ApplicationContext的功能多于BeanFactory,BeanFactory只有最基础访问Bean的能力,而ApplicationContext除了拥有BeanFactory功能之外,还包含了更多的功能,如:国际化支持、资源访问、事件传播等。
② 性能方面:ApplicationContext加载方式是将Bean对象一次性加载,所以在后面访问Bean对象时会很快;BeanFactory需要某个Bean对象时,才去加载该Bean对象,所以它在执行Bean获取时比较慢。【也就是:用空间换时间】
(ApplicationContext有自己的一套策略)
PS:⽽ ClassPathXmlApplicationContext 属于 ApplicationContext 的⼦类,拥有 ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的。
① 静态方法:全局的工具方法,类加载时就存在。
② 实例方法/普通方法:需要时才进行实例化。
