目录
7. ApplicationContext VS BeanFactory
1.Spring是什么?
Spring 就是一个包含了众多工具的loc容器
包含了两个最核心的最关键的功能:
1.将对象存入到Spring中
2.从Spring中获取到对象
2.loc和DI是啥?有什么区别?
IoC, Inversion of Control,译为控制反转,使用控制反转的思路,可以实现依赖类之间的解耦,让我们不必去关心依赖类的具体实现,以及生命周期,我们只需要在使用的时候,把他注入进来就行
DI, Denpendency Injection,译为依赖注入,是一种loc具体实现手段,指的是loc容器运行期间,动态将某种依赖关系注入到对象中
d
区别:Ioc是指导思想,DI是具体的实现
3.Spring最核心的功能是啥?
1.将对象存储到Spring当中
2.从Spring中取出对象
4.Spring项目的创建
1)创建一个maven项目;
2)配置一下国内源(如果settings.xml不存在,就要把这个settings。xml创建进去,并将其勾选)
3)添加Spring依赖包 ,将以下代码粘贴到.xml文件下,然后刷新
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>
4)创建一个启动类;
5.将Bean对象存储到Spring中
1)创建一个业务对象
2)将对象存储到Spring框架(声明式)
在resources包下新建一个xml文件,并将User对象注册到Spring中,使用一个<bean>标签
6.获取并使用Bean对象
1)获取Spring上下文对象
// 方法一: 通过 ApplicationContext 来获取 Spring 的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
// 方法二: 通过 BeanFactory 来获取 Spring 的上下文对象
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
2)通过Spring上下文对象来获取Bean对象(有以下三种方式)
// 方法一: 通过 bean 的 id 来获取
UserBean user = (UserBean) context.getBean("user");
// 缺点:需要强制类型转换
// 方法二: 通过类型获取
UserBean user = context.getBean(UserBean.class);
// 缺点:对于多个对象的同一种类型Bean获取会报错
// 方法三: 通过 id+类型 来获取
UserBean user = context.getBean("user",UserBean.class);
// 优点 : 不需要强制类型转换, 对于多个对象的同一种类型的 Bean 获取不会报错
3)使用业务对象
public static void main(String[] args) {
// 1. 获取到 Spring 的上下文对象
// 方法一: 通过 ApplicationContext 来获取 Spring 的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
// 2. 通过 Spring 上下文对象来获取业务对象
// 方法一: 通过 bean 的 id 来获取
UserBean user = (UserBean) context.getBean("user");
// 3. 使用业务对象
user.printName();
}
7. ApplicationContext VS BeanFactory
1)二者来自的 jar 包不一样(ApplicationContext
来自 spring.context.jar
下;BeanFactory
来自 spring.beans.jar
下)
2)对于继承来说
ApplicationContext 和 BeanFactory 都属于 Spring 下的顶级接口
ApplicationContext 属于 BeanFactory 的⼦类, BeanFactory 所有的功能 ApplicationContext 也是拥有的,
除此之外. AppicationContext 还拥有其他的 BeanFactory 没有的功能
3)对于执行性能来说
ApplicationContext是一次性加载并初始化所有的Bean对象,所以它的启动过程可能比较慢,但是后续执行快;而BeanFactory是需要那个去加载,因此BeanFactory占用系统资源更少,启动更快,但是后续的执行可能会更慢些