您现在的位置是:首页 >其他 >Spring-重新认识IoC二网站首页其他
Spring-重新认识IoC二
简介Spring-重新认识IoC二
文章目录
依赖查找的方式
- 根据 Bean 名称查找
- 实时查找
- 延迟查找
- 根据 Bean 类型查找
- 单个 Bean 对象
- 集合 Bean 对象
- 根据 Bean 名称 + 类型查找
- 根据 Java 注解查找
- 单个 Bean 对象
- 集合 Bean 对象
依赖注入的方式
- 根据 Bean 名称注入
- 根据 Bean 类型注入
- 单个 Bean 对象
- 集合 Bean 对象
- 注入容器內建 Bean 对象
- 注入非 Bean 对象
- 注入类型
- 实时注入
- 延迟注入
依赖查找和依赖注入的来源
- 自定义 Bean
- xml
- 注解
- 容器內建 Bean 对象
- 比如Environment类
- 容器內建依赖
- 比如BeanFactory
Ioc配置源信息
- Bean 定义配置
- 基于 XML 文件
- 基于 Properties 文件
- 基于 Java 注解
- 基于 Java API(专题讨论)
- IoC 容器配置
- 基于 XML 文件
- 基于 Java 注解
- 基于 Java API (专题讨论)
- 外部化属性配置
- 基于 Java 注解
BeanFactory 和 ApplicationContext 谁才是 Spring IoC 容器
- BeanFactory 是 Spring IoC 容器最基本的接口,提供了创建、配置、管理和依赖注入等基本功能。它是一个轻量级的容器,适合于简单的应用场景。
- ApplicationContext 是 BeanFactory 的子接口,除了继承了 BeanFactory 的所有功能外,还提供了一些高级特性。它是一个更加完整和强大的容器,适合于复杂的应用场景。ApplicationContext 除了 IoC 容器角色,还有提供:
- 面向切面(AOP)
- 配置元信息(Configuration Metadata)
- 资源管理(Resources)
- 事件(Events)
- 国际化(i18n)
- 注解(Annotations)
因此,可以说 ApplicationContext 是 Spring IoC 容器的“超集”,提供了更多的功能和更完整的支持。在实际应用中,可以根据具体的需求选择使用 BeanFactory 还是 ApplicationContext。
如何使用BeanFactory和ApplcationContext
前面我们说过,BeanFactory可以实现简单的Ioc容器的功能,如果我们只有配置并管理Bean的需求,可以使用BeanFactory,代码示例如下:
public class BeanFactoryIocContainer {
public static void main(String[] args) {
// 创建容器
DefaultListableBeanFactory defaultListableBeanFactory = new DefaultListableBeanFactory();
// 加载Bean配置
XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(defaultListableBeanFactory);
String location = "classpath:/META-INF/dependency-lookup-context.xml";
xmlBeanDefinitionReader.loadBeanDefinitions(location);
// 获取Bean
User bean = defaultListableBeanFactory.getBean(User.class);
}
}
前面我们说过,ApplicationContext除了能实现BeanFactory的基本功能以外,还可以实现注解等额外功能,代码示例如下:
public class AnnotationApplicationContextIocContainer {
public static void main(String[] args) {
// 创建容器
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
// 将当前类作为配置类
annotationConfigApplicationContext.register(AnnotationApplicationContextIocContainer.class);
// 启动容器
annotationConfigApplicationContext.refresh();
// 获取Bean
User bean = annotationConfigApplicationContext.getBean(User.class);
// 关闭容器
annotationConfigApplicationContext.close();
}
@Bean
User user(){
User user = new User();
user.setId(1);
user.setName("注解");
return user;
}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。