Spring容器:BeanFactory与ApplicationContext
Spring容器是Spring框架的核心,负责实例化、配置和组装Bean。
Spring容器有两种主要类型:BeanFactory
和ApplicationContext
。
一、BeanFactory
- 基本功能:
BeanFactory
是Spring框架的基础设施,提供了完整的IoC支持。它负责实例化、配置和组装Bean。 - 使用方式:
BeanFactory
在启动时并不会实例化Bean,而是在需要时懒加载实例化Bean。这提供了更大的灵活性,但也有一些限制,比如不支持声明式事务管理。 - 适用场景:适用于资源受限的环境,或者当应用程序需要更多控制Bean的生命周期时。
二、ApplicationContext
- 扩展功能:
ApplicationContext
是BeanFactory
的子接口,提供了更多企业级的支持,如国际化、事件传播等。 - 使用方式:
ApplicationContext
在启动时就会实例化所有单例Bean。它还支持基于注解的依赖注入。 - 适用场景:适用于大多数企业级应用,特别是那些需要完整Spring框架特性的应用。
三、代码示例:
使用BeanFactory
// BeanFactoryExample.java
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;
public class BeanFactoryExample {public static void main(String[] args) {// 创建BeanFactoryDefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();// 创建XML读取器XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);// 加载Bean定义文件reader.loadBeanDefinitions(new ClassPathResource("beans.xml"));// 从BeanFactory获取BeanMyBean myBean = beanFactory.getBean(MyBean.class);// 执行Bean的方法myBean.execute();}
}
使用ApplicationContext
// ApplicationContextExample.java
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class ApplicationContextExample {public static void main(String[] args) {// 创建AnnotationConfigApplicationContextAnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 从ApplicationContext获取BeanMyBean myBean = context.getBean(MyBean.class);// 执行Bean的方法myBean.execute();// 关闭ApplicationContextcontext.close();}
}
在这个例子中,我们展示了如何使用
BeanFactory
和ApplicationContext
来获取Bean并执行操作。BeanFactoryExample
使用XML配置文件和BeanFactory
来获取Bean,而ApplicationContextExample
使用注解配置和ApplicationContext
来获取Bean。
四、AI时代的游轮已经到来
如果你觉得开发过程中存在重复性工作,效率不够高。
不妨看看影子的AI+编程玩法,涵盖了Java | AI+编程的学习资料,助力每一位编程人员提高效率,无论你是在校学生或是工作者,都应为未来的AIG时代做准备。
Java | AI编程学习资料https://blog.csdn.net/yingzix688/article/details/137894050