Spring的优点有什么?
1. Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分
2. Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高
3. DI(依赖注入)、IOC(控制反转)、AOP(面向切面)使得JDBC操作简单化
4. Spring是开源的免费的
5. Spring使得对象管理集中化合简单化
spring中实现DI(dependency injection)的几种方式
方式一:接口注入,
方式二:将被依赖对象通过set方法设置进去
方式三:被依赖对象以构造方法参数的方式注入
简单描述下IOC(inversion of control)的理解
一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来, IOC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现放入IOC的 容器中,通过一定的配置由容器来实现类A与接口B的实现的关联。
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);}
编程式:比较灵活,但是代码量大,存在重复的代码比较多, 主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
声明式:比编程式的更灵活。
{
transactionTemplate.execute( new TransactionCallback(){
pulic Object doInTransaction(TransactionStatus ts)
{ //do sth}
}
}
声明式:
使用TransactionProxyFactoryBean:
在spring中是如何配置数据库驱动的
org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。示例如下:
org.hsqldb.jdbcDriver jdbc:hsqldb:db/appfuse sa
* spring中的applicationContext.xml能不能改为其他名字
ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化。缺省情况下, 它会在WEB-INF/applicationContext.xml文件找Spring的配置。 你可以通过定义一个元素名字为”contextConfigLocation”来改变Spring配置文件的位置。示例如下:
org.springframework.web.context.ContextLoaderListener
contextConfigLocation /WEB-INF/xyz.xml
在web中如何配置spring
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
解释一下DI和IOC(把类的依赖从类内部转化到外部以减少依赖)
依赖注入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接口
这两种方式都默认配置文件为web-inf/applicationContext.xml,也可使用context-param指定配置文件
contextConfigLocation /WEB-INF/myApplicationContext.xml
* 在web环境下如何配置applicationContext.xml文件
org.springframework.web.context.ContextLoaderListener 或:
context
org.springframework.web.context.ContextLoaderServlet
* 在spring中如何配置容器的事物管理,相关的类有哪些?
Datasouce
transactionManager
userDao要注入
Datasouce
Proxy代理
Target:userDao:代理对象(目标对象)
transactionAttributes(那些方法需要事务处理)
transactionManager(事务处理服务)
Spring框架有哪几部分组成?
Spring框架有七个模块组成组成,这7个模块(或组件)均可以单独存在,也可以联合使用,功能:
Spring 核心容器(Core):提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,她是工厂模式的实现。BeanFactory使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开。
Spring AOP:通过配置管理特性,Spring AOP模块直接面向方面的编程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何对象支持 AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖于EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring ORM:Spring框架集成了若干ORM框架,从而提供了ORM的对象关系工具,其中包括 JDO、Hibernate、iBatis和TopLink。所有这些都遵从Spring的通用事务和DAO异常层结构。
Spring DAO:JDBC DAO抽象层提供了有意义的异常层次的结构,可用该结构来管理异常处理和不同数据供应商抛出的异常错误信息。异常层次结构简化了错误处理,并且大大的降低了需要编写的异常代码数量(例如,打开和关系连接)。Spring DAO的面向JDBC的异常遵从通用的DAO异常层结构。
Spring WEB:Web上下文模块建立在上下文模块(Context)的基础之上,为基于Web服务的应用程序提供了上下文的服务。所以Spring框架支持 Jakarta Struts的集成。Web模块还简化了处理多部分请求及将请求参数绑定到域对象的工作。
Spring上下文(Context):Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化校验和调度功能。
Spring MVC:Spring的MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳的大量视图技术,包括JSP、Velocity、Tiles、iText和Pol。