Spring中BeanFactory和ApplicationContext的作用和区别(推荐)

  1. BeanFactory和ApplicationContext的区别

BeanFactory是Spring Framework中最基础的IOC容器,用于创建和管理应用中的Bean对象,提供对依赖注入(DI)和面向切面编程(AOP)的基本支持。

ApplicationContext是一个高级的IOC容器,它扩展了BeanFactory,并提供了更多的企业级功能,如国际化、事件传播、资源管理、Web应用程序上下文和应用程序层次结构、事务管理,各种数据源的集成等。

因此,BeanFactory主要实现Bean对象的创建和管理,而ApplicationContext除了BeanFactory的基本功能,还拓展了一些高级的功能。

  1. BeanFactory和ApplicationContext的作用

(1) BeanFactory

BeanFactory的主要作用是用于管理应用中的Bean对象,提供对依赖注入(DI)和面向切面编程(AOP)的基本支持。

创建BeanFactory对象方式:

Resource resource = new ClassPathResource("spring.xml");
BeanFactory factory = new XmlBeanFactory(resource);

(2) ApplicationContext

ApplicationContext提供了更多的企业级功能,如国际化、事件传播、资源管理、Web应用程序上下文和应用程序层次结构、事务管理,各种数据源的集成等。

创建ApplicationContext对象方式:

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
  1. BeanFactory和ApplicationContext的区别示例

以下示例演示了BeanFactory和ApplicationContext在创建对象时的差异:

 // 创建BeanFactory
 Resource resource = new ClassPathResource("spring.xml");
 BeanFactory beanFactory = new XmlBeanFactory(resource);

 // 通过BeanFactory获取User对象
 User user1 = (User)beanFactory.getBean("userBean");
 System.out.println(user1);

 // 创建ApplicationContext
 ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

 // 通过ApplicationContext获取User对象
 User user2 = (User)context.getBean("userBean");
 System.out.println(user2);

在上述示例中,BeanFactory创建了一个XmlBeanFactory对象,用于管理Spring配置文件中定义的Bean对象;ApplicationContext创建了一个ClassPathXmlApplicationContext对象,同样用于管理Spring配置文件中定义的Bean对象。

在获取User对象时,两者的调用方式是相同的,但是BeanFactory仅在请求时初始化Bean对象,而ApplicationContext会在应用启动时提前初始化Bean对象。

因此,在相同的配置文件下,运行上述示例两次时,BeanFactory会创建两个不同的User对象,而ApplicationContext只会创建一个User对象。

  1. BeanFactory和ApplicationContext的作用示例

以下示例演示了ApplicationContext在集成MyBatis框架时的作用:

// 创建ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

// 从ApplicationContext获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory)context.getBean("sqlSessionFactory");

// 创建MyBatis的SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
    // 从数据库中获取User对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.selectUserByID(1);
    System.out.println(user);
} finally {
    sqlSession.close();
}

在上述示例中,ApplicationContext提供了获取SqlSessionFactory对象的功能,进而创建MyBatis的SqlSession对象。同时,通过调用SqlSession对象的getMapper方法,实现了在数据库中查询User对象的功能。

因此,ApplicationContext在集成第三方框架时,可以提供依赖注入的功能,让应用更加灵活和高效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring中BeanFactory和ApplicationContext的作用和区别(推荐) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 简单了解JavaBean作用及常用操作

    简单了解JavaBean作用及常用操作 JavaBean是一种Java语言写成的可重用组件。它是指符合特定规范的Java类,具有无参构造函数,可以通过工具或代码进行设置和访问属性。 JavaBean的作用 JavaBean的作用是将数据和操作数据的方法封装在一起,形成一个可复用的组件,方便在不同的系统中使用。同时,JavaBean的属性可以使用JavaBea…

    Java 2023年6月15日
    00
  • SpringSecurity框架下实现CSRF跨站攻击防御的方法

    下面是关于Spring Security框架下实现CSRF跨站攻击防御的方法的攻略。 什么是CSRF攻击 CSRF(Cross-site request forgery)跨站请求伪造,指攻击者诱导用户访问一个第三方网站,在该网站中,利用用户已经登录了目标网站的登录凭证(cookie、session等)发起的跨站请求,以此来控制用户的账号。 Spring Se…

    Java 2023年5月20日
    00
  • 五分钟带你快速学习Spring IOC

    五分钟带你快速学习Spring IOC 什么是Spring IOC Spring IOC(Inversion of Control)是Spring框架的核心组件,它是一种设计模式,它将对象之间的依赖关系的控制权从应用程序代码中转移到了Spring容器中,利用Spring容器帮助我们完成对象的注入和管理,从而降低了应用程序代码的耦合度,提高了代码的可测试性和可…

    Java 2023年5月19日
    00
  • Lombok如何快速构建JavaBean与日志输出

    Lombok 是一个用于简化 Java 代码的工具,它可以通过注解的方式在编译器生成代码,比如可以快速地生成 Java Bean 和日志输出代码。 1. Lombok 安装 Lombok 的安装非常简单,只需要在项目的 Maven 或 Gradle 依赖中添加如下依赖即可: <dependency> <groupId>org.proj…

    Java 2023年5月26日
    00
  • asp.net 组合模式的一个例子

    首先我们来介绍一下ASP.NET 中的组合模式。组合模式是一种结构型设计模式,它允许我们将对象组合成树状结构,并且使得用户对单个对象和组合对象的处理具有一致性。在ASP.NET中,组合模式可以用来创建复杂的控件和窗体布局,让用户能够更加方便和灵活地选择和组合控件,实现更加个性化的UI 界面。 下面我们通过两个具体的例子,来深入了解 ASP.NET 中的组合模…

    Java 2023年5月19日
    00
  • 什么是Java多线程,如何实现

    什么是Java多线程? 多线程是指在一个程序中同时运行多个线程,并行执行多个任务的技术。Java是一种多线程编程语言,提供了丰富的多线程API,使得开发者可以轻松地创建多线程应用程序。 在Java中,每个线程都是一种独立的执行路径,每个线程都会独立地执行自己的代码和内存空间,并且可以互不干扰的访问其它线程中的数据。 如何实现Java多线程? Java提供了两…

    Java 2023年5月19日
    00
  • Java基于Calendar类输出指定年份和月份的日历代码实例

    Java基于Calendar类输出指定年份和月份的日历代码实例如下: import java.util.*; public class CalendarExample { public static void main(String[] args) { // 声明并获取Calendar对象 Calendar calendar = Calendar.getIn…

    Java 2023年5月20日
    00
  • Java实现经典游戏飞机大战-I的示例代码

    非常感谢您对“Java实现经典游戏飞机大战-I的示例代码”的关注。 下面,我将为大家详细讲解如何实现这个示例代码,并提供两个示例说明。 1. 初步了解示例代码 首先,您需要了解示例代码的基本结构和所包含的类: Main 类:程序的启动入口,用于初始化并启动游戏。 GameFrame 类:游戏窗口,包含了游戏的整个界面,处理用户的输入和绘制游戏元素。 Game…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部