Skip to content

IOC

约 262 字小于 1 分钟

2024-12-26

即控制反转,由 Spring 的 IOC 容器管理 bean,并通过 @Autowired 或 @Resource 注解([[#@Autowired 与 @Resource 差别|两者区别]])进行自动装配 默认配置下,每一个 bean 都是 singleton,即全局只会创建一个对象

获取 IOC 容器创建对象

通过读取包含 bean 信息的 xml 文件创建 IOC 容器

ApplicationContext container = new ClassPathXmlApplicationContext("spring.xml");

通过 SpringApplication 对象的 run 方法可以获取ConfigurableApplicationContext,即 ApplicationContext 的子类

SpringApplication springApplication = new SpringApplication(SpringDemoApplication.class);  
ApplicationContext context = springApplication.run();

通过 BeanFactory 获取 Bean 对象 这种方式为按需分配,而ApplicationContext会一次性创建所有 bean,且相比于 ApplicationContext 不支持自动装配 此外,ApplicationContext实际上是从 BeanFactory 继承而来

BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));  
Student s = factory.getBean(Student.class);

@Autowired 与 @Resource 差别

@Autowired 由 Spring 提供,先根据类型查找,若存在多个相同类型的 bean,再根据类名进行查找 @Resource 由 Java 提供,与 @Autowired 相反,先通过类型查找,若存在重复,再根据类型进行查找