spring相关:spring介绍与两大核心容器

1.什么是spring?

spring是一个开放源码的J2EE容器框架,是针对bean的生命周期进行管理的轻量级容器。容器内放置的都是java对象(java bean),当容器启动时,容器为我们创建对象,容器销毁时,对象也销毁。

提供功能:IOC  AOP  webMVC

2.spring的优点

 1.方便解耦,简化开发

 通过Spring提供的IOC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

 2.AOP编程的支持

通过Spring提供的AOP(面向切面编程)功能,方便进行面向切面的编程,许多不容器用传统OOP(面向对象编程)实现的功能可以通过AOP轻松应付。

 3.声明式事务的支持

在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量

 4.方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作,在spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

 5.方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Structs、Hibernate、Hessian、Quartz )等的直接支持

6.降低Java EE API的使用难度

Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

3.Spring体系结构

核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成,它们的细节如下:

  • spring-core模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。

  • spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦

  • context模块建立在由corebeans 模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问对象。Context模块继承自Bean模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能。Context模块也支持Java EE的功能,比如EJB、JMX和远程调用等。ApplicationContext接口是Context模块的焦点。spring-context-support提供了对第三方库集成到Spring上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。

  • spring-expression模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是JSP2.1规范中定义的统一表达式语言的扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IoC容器检索对象,还支持列表的投影、选择以及聚合等。

4.Spring核心容器

spring容器会负责控制程序之间的关系,而不是由程序代码直接控制。Spring为我们提供了两种核心容器,分别为BeanFactory和ApplicationContext

4.1 BeanFactory

创建bean实例时,需要提供Spring所管理容器的配置信息applicationContext.xml,这些信息通畅用xml文件形式来管理,加载配置信息的语法如下:

 BeanFactory beanFactory = 
           new XmlBeanFactory(new FileSystemResource("F: /applicationContext.xml"));

4.2ApplicationContext

首先需明确的是Application是beanFactory的子接口,是另一种常用的Spring核心容器,不仅实现了BeanFactory 的所有功能,还增加了国际化,资源访问,事件传播等。

常用实现类:

ClassPathXmlApplicationContext 主要获取用户resource路径下的配置

   // 大多数使用用这一种
        // 通过ApplicationContext 子类ClassPathXmlApplicationContext 去读取配置文件   classpath:可省略
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:bean1.xml");

FileSystemXmlApplicationContext 主要获取绝对路径的配置

   // 通过FileSystemXmlApplicationContext 加载 bean 配置文件 容器按照配置文件 初始化对象
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext("C:\\Users\\ausu\\Desktop\\spring01\\src\\main\\resources\\bean1.xml");

4.3易混淆面试题(FactoryBean与BeanFactory的区别)

FactoryBean 创建对象的工厂接口,在ProxyFactroyBean 继承 FactoryBean 完成创建代理对象

BeanFactory 容器的顶层接口, 主要用于获取容器中的bean ,常用的子接口 ApplicationContext
 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值