JAVA面试-框架篇

Spring框架是一个开源的Java容器,提供控制反转和面向切面编程,管理web、业务、DAO和持久层组件。核心包括BeanFactory和ApplicationContext,支持AOP、事务管理、MVC框架等。它通过配置文件或注解实现Bean的实例化和依赖注入,简化了对象的创建和维护,实现了轻量级的框架功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring框架

Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。

轻量、控制反转、面向切面、容器、MVC框架、事务管理、异常处理

构成模块

核心容器:核心容器提供Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring 上下文:Spring上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:通过配置管理特性,SpringAOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI

 Spring 原理

1)  建立一个bean类(java实体类):Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象

2)  在applicationContext.xml中配置,bean的配置

<bean id="person"class="org.jingdong.bean.life.Person">

<propertyname="name" value="grl"></property>
<property name="age" value="11"></property>
<property name="book" ref="book"></property>
</bean>

3)  主方法中(Main)

//创建IOC容器

当ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext .xml");

Persion persion=(Persion)ac.getbean(“Persion”);//从容器里获取bean实例

//使用bean persion.genBean();

被执行时,Spring容器对象被创建,同时applicationContext .xml中的bean就会被创建到内存中:

原理总结:

1.使用spring ,没有new对象,我们把创建对象的任务交给spring框架。

通过newXmlBeanFactory(“applicationContext.xml”)/ newClassPathXmlApplicationContext("applicationContext .xml")等方式即可启动容器。在容器启动时,Spring根据配置文件的描述信息,自动实例化Bean并完成依赖关系的装配,从容器中即可返回准备就绪的Bean实例,后续可直接使用之。 
Spring为什么会有这种“神奇”的力量,仅凭一个简单的配置文件,就能魔法般地实例化并装配好程序所用的Bean呢?这种“神奇”的力量归功于Java语言本身的类反射功能
2.spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可。

 

BeanFaction 和applicationContext的区别:Spring提供两种容器

1.Beanfactory,它的核心概念就是bean工厂,用作于bean生命周期的管理,最基本的依赖注入

2.applicationcontext,单看名字(应用上下文)就能看出它包含的范围更广,它继承自bean factory但不仅仅是继承自这一个接口,还有继承了其他的接口,

区别:

1)初始化Bean:

BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。

2) ApplicationContext会利用Java反射机制自动识别出配置文件中定义的BeanPostProcessor、InstantiationAwareBeanPostProcessor和BeanFactoryPostProcessor,并自动将它们注册到应用上下文中;而BeanFactory需要在代码中通过手工调用addBeanPostProcessor()方法进行注册

3) BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 

ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能

(1)MessageSource, 提供国际化的消息访问  
(2)资源访问,如URL和文件  
(3)事件传播特性,即支持aop特性
(4)载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层 Bean的生命周期

1.Spring容器 从XML 文件中读取bean的定义,并实例化bean。

2.Spring根据bean的定义填充所有的属性。

3.如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。

4.如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。

5.如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。

6.如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。

7.如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。

8.如果bean实现了 DisposableBean,它将调用destroy()方法

 

Bean的作用域:通过scope来设置作用域范围

当即“scope”,在面向对象程序设计中一般指对象或变量之间的可见范围。而在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围。

单例(singleton): bean在每个Spring ioc 容器中只有一个实例

原型(prototype):一个bean的定义可以有多个实例

会话(session):在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效

请求(request):每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效

<bean id="userDao" class="com.ioc.UserDaoImpl"scope="singleton"/>

Spring配置bean实例化的方式:3种

1)使用类构造器实例化

<bean id="bean1"class="cn.itcast.spring.b_instance.Bean1"></bean>

2)使用静态工厂方法实例化(简单工厂模式)

<bean id="bean2"class="cn.itcast.spring.b_instance.Bean2Factory"factory-method="getBean2"></bean>

 

3)使用实例工厂方法实例化(工厂方法模式)

<beanid="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"></bean>

<bean id="bean3"factory-bean="bean3Factory"factory-method="getBean3"></bean>

 

IOC:(全称:Inverse Of Control)控制反转:把创建对象和维护之间的关系的权利由程序中转移到Spring容器的配置文件中。

DI:  (全称:DependencyInjection)依赖注入,IOC的另一种表现方式,组件以一种预先定义好的方式来接受容器注入的资源。

 

IOC基础:IoC底层实现:工厂(设计模式)+反射(机制) + 配置文件(xml)

1. 控制反转IoC(Inversion of Control),是一种设计思想,.将Bean 创建反转给Spring容器.

2. 依赖注入DI(Dependency Injection)是实现IoC的一种方法,在Spring创建这个类的过程中,将这个类的依赖的属性注入进去.

DI是通过反射来实现的,反射允许程序通过某个类的名字或者对象来得到类本身。spring就是通过反射来完成注入的。

作用:把应用的代码量降到最低,使应用容易测试。最小的代价和最小的侵入性使松散耦合得以实现

IOC的实现方式:XML配置方式、Spring注解方式

采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的

 

DI(依赖注入)   

依赖注入,本质

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值