一、Spring框架的优点都有什么?
1.Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分
2.Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高
3.依赖注入和IoC使得JDBC操作简单化
4.Spring是开源的免费的
5.Spring使得对象管理集中化合简单化
二、描述一下Spring中实现DI(Dependency Injection)的几种方式
方式一:接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。
方式二:Type2 IoC: Setter injection对象创建之后,将被依赖对象通过set方法设置进去
方式三:Type3 IoC: Constructor injection对象创建时,被依赖对象以构造方法参数的方式注入
三、简述你对IoC(Inversion of Control)的理解
一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的 容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。
四、Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法。
在context中定义DataSource,创建SessionFactoy,设置参数;DAO类继承HibernateDaoSupport,实现具体接口,从中获得HibernateTemplate进行具体操作。在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。
五、请介绍一下Spring的事务管理
spring提供了几个关于事务处理的类:
TransactionDefinition //事务属性定义
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。
一般事务定义步骤:
TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try
{ //do sth
transactionManager.commit(ts);
}
catch(Exception e){transactionManager.rollback(ts);}
spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。
编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
void add()
{
transactionTemplate.execute( new TransactionCallback(){
pulic Object doInTransaction(TransactionStatus ts)
{ //do sth}
}
}
声明式:
使用TransactionProxyFactoryBean:
PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly
围绕Poxy的动态代理 能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean
PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
六、如何在Spring的applicationContext.xml里面使用JNDI而不是datasource?
可以使用”org.springframework.jndi.JndiObjectFactoryBean”来实现。示例如下:
<bean id=”dataSource”>
<property name=”jndiName”>
<value>java:comp/env/jdbc/appfuse</value>
</property>
</bean>
七、Spring里面如何配置数据库驱动?
使用”org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。示例如下:
<bean id=”dataSource”>
<property name=”driverClassName”>
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name=”url”>
<value>jdbc:hsqldb:db/appfuse</value>
</property>
<property name=”username”><value>sa</value></property>
<property name=”password”><value></value></property>
</bean>
八、Spring里面applicationContext.xml文件能不能改成其他文件名?
ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化。缺省情况下, 它会在WEB-INF/applicationContext.xml文件找Spring的配置。 你可以通过定义一个<context-param>元素名字为”contextConfigLocation”来改变Spring配置文件的位置。示例如下:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/xyz.xml</param-value>
</context-param>
</listener-class>
</listener>
九、如何在web应用里面配置spring?
在J2EE的web应用里面配置spring非常简单,最简单的只需要把spring得ContextLoaderListener添加到你的web.xml文件里面就可以了,示例如下:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
十、Spring里面如何定义hibernate mapping?
添加hibernate mapping 文件到web/WEB-INF目录下的applicationContext.xml文件里面。示例如下:
<property name=”mappingResources”>
<list>
<value>org/appfuse/model/User.hbm.xml</value>
</list>
</property>
十一、两种依赖注入的类型都是什么?
两种依赖注入的类型分别是setter注入和构造方法注入。
setter注入: 一般情况下所有的java bean, 我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下:
public class namebean {
String name;
public void setName(String a) {
name = a; }
public String getName() {
return name; }
}
我们会创建一个bean的实例然后设置属性的值,spring的配置文件如下:
<bean id=”bean1″ >
<property name=”name” >
<value>tom</value>
</property>
</bean>
Spring会调用setName方法来只是name熟悉为tom
构造方法注入:构造方法注入中,我们使用带参数的构造方法如下:
public class namebean {
String name;
public namebean(String a) {
name = a;
}
}
我们会在创建bean实例的时候以new namebean(”tom”)的方式来设置name属性, Spring配置文件如下:
<bean id=”bean1″ >
<constructor-arg>
<value>My Bean Value</value>
</constructor-arg>
</bean>
使用constructor-arg标签来设置构造方法的参数
十二、解释一下Dependency injection(DI,依赖注入)和IOC(Inversion of control,控制反转)?
依赖注入DI是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
十三、spring中的BeanFactory与ApplicationContext的作用和区别?
作用:
1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。
2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:
a. 国际化支持
b. 资源访问:Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”
c. 事件传递:通过实现ApplicationContextAware接口
3. 常用的获取ApplicationContext的方法:
FileSystemXmlApplicationContext:从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
ClassPathXmlApplicationContext:从classpath的xml配置文件创建,可以从jar包中读取配置文件
WebApplicationContextUtils:从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
这两种方式都默认配置文件为web-inf/applicationContext.xml,也可使用context-param指定配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param>
十四、如何在web环境中配置applicationContext.xml文件?
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
或:
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
通过如下方法取出applicationContext实例:
ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);
十五、spring+hibernate的配置文件中的主要类有那些?如何配置?
在myeclipse中先加入spring环境再加入hibernate环境。
如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?
spring+hibernate的配置文件中的主要类有那些?如何配置?
dataSource
sessionFactory:hibernate.cfg.xml
transactionManager
userDao (extends HibernateDaoSupport)
sessionFactory
facade
proxy
sessionFactory
transactionManager
facade
分享到:
相关推荐
这篇文档“25个经典的Spring面试问题包含答案”旨在帮助求职者和开发者更好地理解Spring的核心概念和实际应用。以下是对这些问题的详细解读: 1. **什么是Spring框架?** Spring是一个开源的Java平台,它为构建...
Spring框架知识点大全 一、Spring框架的优点 Spring框架具有多种优点,包括: 1. 分层的架构:Spring框架是分层的架构,使得用户可以选择使用需要的层而不需要管不需要的部分。 2. POJO编程:Spring框架支持POJO...
Spring 框架是 Java 开发中的核心组件之一,它为开发者提供了许多强大的功能,包括依赖注入(DI)、控制反转(IOC)、事务管理以及对 ORM 框架的支持。以下是对这些知识点的详细解释: **1. Spring 的优点** - **...
面试中,Spring的相关问题经常出现,下面将详细解答这些常见面试题。 首先,Spring的优点包括: 1. 分层架构:Spring允许开发者选择需要的模块,避免了不必要的复杂性。 2. POJO(Plain Old Java Object)编程:它...
Spring框架是一款开源的Java平台应用框架,它提供了全面的基础架构支持,使得开发人员能够轻松构建复杂的企业级应用程序。Spring的核心特性包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect ...
spring 面试题集锦spring 面试题集锦spring 面试题集锦spring 面试题集锦spring 面试题集锦spring 面试题集锦
《Spring面试题宝典》是针对Java开发者,尤其是对Spring框架有一定掌握的程序员们准备的一份面试指南。Spring作为企业级应用开发中的重要组件,其深入理解和熟练运用是面试过程中的常见考察点。本宝典将围绕Spring的...
标题《Spring面试常见问题》中的知识点涵盖了关于Spring框架的多个方面的内容。Spring是一个开源的Java企业级应用开发框架,它包含了一系列核心的特性,可以用于开发任何Java应用程序。Spring框架的设计目标是简化...
Spring面试专题及答案 SpringMVC SpringCloud SpringBoot面试笔试及答案学习笔记合集: 10个高频Spring BOOT.docx 55个Spring(7模块).docx 68spring(7个模块).docx spring boot35.docx Spring Data JPA中文文档...
标题为"Spring面试题总结"的文档是一份专门针对程序员在应聘与Spring相关职位时可能会遇到的技术面试题的整理和总结。Spring作为一个企业级Java应用框架,已经成为业界使用最为广泛的框架之一,对于期望从事Java后端...
本个工作7年经验,总结出的spring面试宝典,一般工作1年到5年左右面试的人 只要面试SPRING都不会离开这里面的内容,供大家学习
Spring Boot作为Spring框架的一个子项目,旨在简化应用程序的创建和配置过程,而Spring Cloud则提供了全面的服务治理工具,使得在分布式系统中进行服务发现、负载均衡、配置管理和熔断等操作变得更加便捷。...
Spring框架是Java开发中的核心组件,它为应用程序提供了一个全面的基础设施,包括依赖注入(DI)、面向切面编程(AOP)以及各种企业级服务。面试中,Spring相关的题目经常出现,这反映了其在实际开发中的重要性。...
Spring Cloud 面试题及答案 以下是对 Spring Cloud 相关知识点的详细解释: 1. 什么是 Spring Cloud? Spring Cloud 是一系列框架的有序集合,利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的...
Spring框架是一个开源的Java平台,用于构建企业级应用程序。它提供了一种简洁的方式来管理组件、事务处理、数据访问以及与各种第三方库集成。Spring的核心功能包括依赖注入(DI)、面向切面编程(AOP)和容器管理等...
spring面试题总结,spring面试题总结,spring面试题总结,spring面试题总结
《Spring Cloud面试大全(附答案赠送版).pdf》是一本专为准备Spring Cloud相关面试的人员准备的综合性面试指南。该PDF文件收录了丰富的面试题目和详细的答案解析,涵盖了Spring Cloud微服务架构的各个方面,从基础...
Spring 框架是Java开发中的一...以上内容涵盖了Spring的核心概念、AOP、DI、集成其他框架以及事务管理等方面,这些都是Spring面试中常见的知识点。理解和熟练运用这些内容,将有助于提升在Spring开发和面试中的竞争力。
在面试中,Spring通常是候选人必须要面对的知识点之一。本文将介绍Spring框架的基本概念、主要模块、使用的好处、控制反转和依赖注入的核心概念,以及Spring中的IoC容器。 1. Spring框架的基本概念和主要模块 ...