Spring框架七大模块
核心容器(Spring Core)
核心容器提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开。
应用上下文(Spring Context)
Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring面向切面编程(Spring AOP)
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
JDBC和DAO模块(Spring DAO)
JDBC、DAO的抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理,和不同数据库供应商所抛出的错误信息。异常层次结构简化了错误处理,并且极大的降低了需要编写的代码数量,比如打开和关闭链接。
对象实体映射(Spring ORM)
Spring框架插入了若干个ORM框架,从而提供了ORM对象的关系工具,其中包括了Hibernate、JDO和 IBatis SQL Map等,所有这些都遵从Spring的通用事物和DAO异常层次结构。
Web模块(Spring Web)
Web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文。所以Spring框架支持与Struts集成,web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
MVC模块(Spring Web MVC)
MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的。MVC容纳了大量视图技术,其中包括JSP、POI等,模型来有JavaBean来构成,存放于m当中,而视图是一个街口,负责实现模型,控制器表示逻辑代码,由c的事情。Spring框架的功能可以用在任何J2EE服务器当中,大多数功能也适用于不受管理的环境。Spring的核心要点就是支持不绑定到特定J2EE服务的可重用业务和数据的访问的对象,毫无疑问这样的对象可以在不同的J2EE环境,独立应用程序和测试环境之间重用。
Spring框架中的三大核心思想是什么
DI(依赖注入),IOC(控制反转),AOP(面向切面编程)
IOC的概念以及在Spring容器中如何进行IOC的操作。
IOC:Inversion of Control,控制反转。在Java开发中,IOC意味着将你设计好的类交给系统去控这里写代码片
制,而不是在你的类内部控制,这称为控制反转,就是被调用类的实例由原先的调用类控制创建、销毁现在转变成由Spring的容器管理。
Spring容器是如何管理Bean的生命周期的(如Bean的初始化方法,Bean的销毁方法)
创建:
1 <property name=”userDao” ref=”被引用bean的名称” /> 2 3 <property name=”username” value = “字符串”/>
在Spring框架中获取连接池有几种方式。
当JNDI与DBCP同时存在时,会不会出现问题,如果不能同时存在的话,请说明原因
四种方式,如下:
1:DBCP数据源
DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括/lib/jakarta-commons/commons-pool.jar。下面是使用DBCP配置oracle数据源的配置片断:
1 <bean id=”dataSource” 2 class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”> 3 <property name=”driverClassName” 4 5 value=” oracle.jdbc.driver.OracleDriver ” /> 6 <property name=”url” value=”jdbc:oracle:thin:@localhost:1521:orcl ” /> 7 <property name=”username” value=”root” /> 8 <property name=”password” value=”1234″ /> 9 </bean>
2:C3P0数据源
C3P0是一个开放源代码的JDBC数据源实现项目,它在lib目录中与Hibernate一起发布,实现了JDBC3和JDBC2扩展规范说明的Connection 和Statement 池。C3P0类包位于/lib/c3p0/c3p0-0.9.0.4.jar。下面是使用C3P0配置一个Oracle数据源:
1 <bean id=”dataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource” destroy-method=”close”> 2 <property name=”driverClassName” 3 4 value=” oracle.jdbc.driver.OracleDriver ” /> 5 <property name=”url” value=”jdbc:oracle:thin:@localhost:1521:orcl ” /> 6 <property name=”username” value=”root” /> 7 <property name=”password” value=”1234″ /> 8 </bean>
3. Spring的数据源实现类(DriverManagerDataSource)
Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource ,它位于org.springframework.jdbc.datasource包中。这个类实现了javax.sql.DataSource接口,但它并没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。因此,这个数据源类比较适合在单元测试或简单的独立应用中使用,因为它不需要额外的依赖类。
1 <bean id=”dataSource” class=”org.springframework.jdbc.datasource.DriverManagerDataSource” destroy-method=”close”> 2 <property name=”driverClassName” 3 4 value=” oracle.jdbc.driver.OracleDriver ” /> 5 <property name=”url” value=”jdbc:oracle:thin:@localhost:1521:orcl ” /> 6 <property name=”username” value=”root” /> 7 <property name=”password” value=”1234″ /> 8 </bean>
4.获取JNDI数据源
如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置:
1 <bean id=”dataSource” 2 3 class=”org.springframework.jndi.JndiObjectFactoryBean”> 4 <property name=”jndiName” value=”java:comp/env/jdbc/oracle”/> 5 </bean>
通过jndiName指定引用的JNDI数据源名称。
在使用Spring的JDBCTemplate操作数据时,必须要往模板中注入哪些对象,同时模板要不要手动关闭数据库连接
注入DataSource数据源对象
不要手动关闭数据库连接,JdbcTemplate会帮我们关闭数据库连接
JdbcTemplate的QueryForList方法得到List集合,请问List集合中每一个对象为什么数据类型,在JSP页面使用EL表达式如何取值。
每一个对象为java.util.Map类型的数据,EL表达式里用取值
AOP的概念以及使用AOP机制有什么好处。Java编程中实现AOP有几种方式
AOP的概念是Aspected Oriented Programming 面身向方面编程。
好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注
实现AOP有几种方式:
-
Spring 1.2版本中通过ProxyFactoryBean来实现aop,即通过动态代理来实现的,Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等
-
Spring 2.0 AOP需要改的是FBI 这个类,而且它也不需要再实现某些接口
-
三使用标注(@AspectJ)实现AOP
Spring框架中的事务处理有几种。请分别阐述两者的区别
spring提供的事务管理可以分为两类:编程式的和声明式的。
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;
声明式的比编程式的更灵活.
编程式事务的总接口是什么?使用编程式事务需要用到哪几个Spring事务的核心类对象
总接口
PlatformTransactionManager接口,
核心类:
1 TransactionDefinition //事务属性定义 2 3 TranscationStatus //代表了当前的事务,可以提交,回滚。 4 5 PlatformTransactionManager核心接口的子类
Spring的声明式事务能不能为普通的类产生代理接口,能不能在代码中使用Try/Catch能捕获异常,如果不可以,请说明原因
不能。Spring的声明式事务为实现类产生代理。不能在代码中使用Try/Catch,因为代码中捕获了异常,Spring容器捕获不了异常。
使用TransactionProxyFactoryBean为Bean产生事务物理时,需要哪几个属性值的设置:
1 <bean name=”baseTransactionProxy” 2 3 class=”org.springframework.transaction.interceptor.TransactionProxyFactoryBean”> 4 1 5 2 6 3 7 ⑴<!– 为事务代理bean注入事务管理器–> 8 9 <property name=”transactionManager” ref=”transactionManager”> 10 11 </property> 12 13 ⑵<!– 设置事务属性–> 14 15 <property name=”transactionAttributes”> 16 17 <props> 18 19 ⑶<!– 所有方法采用required的事务策略 -> 20 21 <prop key=”*”>PROPAGATION_REQUIRED</prop> 22 23 </props> 24 25 </property> 26 27 ⑷<!– 为事务代理bean设置目标bean –> 28 29 <property name=”target” ref=”userDao”> 30 31 </property> 32 33 </bean> 34 35 ⑸<!– 目标bean –> 36 37 <bean name=”userDao” class=”com.dao.userDao”> 38 39 <property name=”dataSource” ref=”dataSource” /></property> 40 41 </bean>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具