① Spring容器相关的核心接口是( )和( ),默认的配置文件是( )。
核心接口ApplicationConext和BeanFactory默认配置文件是applicationContext.xml
② 面试 springmvc配置文件怎么配置
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。一、Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0)1. jar包引入Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib-nodep-2.1_3.jarHibernate 3.6.8:hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、antlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.GA.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.4.jar、相应数据库的驱动jar包 SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请求给相应的Handler,Handler处理以后再返回相应的视图(View)和模型(Model),返回的视图和模型都可以不指定,即可以只返回Model或只返回View或都不返回。DispatcherServlet是继承自HttpServlet的,既然SpringMVC是基于DispatcherServlet的,那么我们先来配置一下DispatcherServlet,好让它能够管理我们希望它管理的内容。HttpServlet是在web.xml文件中声明的。<!– Spring MVC配置 –><!– ====================================== –><servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!– 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> 默认 </init-param> –> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping><!– Spring配置 –><!– ====================================== –><listener> <listenerclass> org.springframework.web.context.ContextLoaderListener </listener-class></listener><!– 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 –><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/applicationContext.xml</param-value></context-param>spring-servlet.xml配置spring-servlet这个名字是因为上面web.xml中<servlet-name>标签配的值为spring(<servlet-name>spring</servlet-name>),再加上“-servlet”后缀而形成的spring-servlet.xml文件名,如果改为springMVC,对应的文件名则为springMVC-servlet.xml。<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context <a href="http://www.springframework.org/schema/context/spring-context-3.0.xsd">http://www.springframework.org/schema/context/spring-context-3.0.xsd</a>"> <!– 启用spring mvc 注解 –> <context:annotation-config /> <!– 设置使用注解的类所在的jar包 –> <context:component-scan base-package="controller"></context:component-scan> <!– 完成请求和注解POJO的映射 –> <bean class="org.springframework.web.servlet.mvc.annotation." /> <!– 对转向页面的路径解析。prefix:前缀, suffix:后缀 –> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/" p:suffix=".jsp" /></beans>DispatcherServlet会利用一些特殊的bean来处理Request请求和生成相应的视图返回。关于视图的返回,Controller只负责传回来一个值,然后到底返回的是什么视图,是由视图解析器控制的,在jsp中常用的视图解析器是InternalResourceViewResovler,它会要求一个前缀和一个后缀在上述视图解析器中,如果Controller返回的是blog/index,那么通过视图解析器解析之后的视图就是/jsp/blog/index.jsp。
③ spring和struts2整合配置文件
一、需要的JAR文件为:Spring和Struts2框架本身需要的JAR文件以及他们所依赖的JAR文件,比如commons-logging.jar等等,另外还需要Struts2发布包中的struts2-spring-plugin-x.xx.jar。二、在web.xml中增加WebApplicationContext的相应配置,以下两种配置方式本质是一样的。1. Servlet 2.3及以上版本可以使用监听器,相应配置如下:<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value></context-param><listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>如果spring配置文件被命名为applicationContext.xml,并且放在WEB-INF目录下,则不需要配置<context-param>,因为ContextLoaderListener默认在WEB-INF目录下寻找名为applicationContext.xml的文件。若存在多个Spring配置文件,则在<param-value>中依次列出,之间以逗号隔开。2. Servlet 2.3以下版本由于不支持<listener>,需要配置<servlet>,格式如下:<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value></context-param><servlet> <servlet-name>contextLoaderServlet</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet>如果spring配置文件被命名为applicationContext.xml,并且放在WEB-INF目录下,则不需要配置<context-param>,因为ContextLoaderListener默认在WEB-INF目录下寻找名为applicationContext.xml的文件,或者是名字为contextConfigLocation的ServletContext参数所指定的文件。由于该Servlet配置只是为了在容器启动时能启动ContextLoaderServlet使其工作,而不需要引用该Servlet,所以不需要配置<servlet-mapping>。三、在web.xml中完成加载WebApplicationContext之后,接下来就可以做到Spring和Struts2的整合了。整合有两种方法,分别叙述如下:1. 第一种实现方法:1) 将Struts的业务逻辑控制器类配置在Spring的配置文件中,业务逻辑控制器中引用的业务类一并注入。注意,必须将业务逻辑控制器类配置为scope=”prototype”!示例如下:<bean id=”LoginAction” class=”yaso.struts.action.LoginAction”> <property name=”loginDao” ref=”LoginDao”/></bean>2) 在struts.xml或者等效的Struts2配置文件中配置Action时,指定<action>的class属性为Spring配置文件中相应bean的id或者name值。示例如下:<action name=”LoginAction” class=”LoginAction”> <result name=”success”>/index.jsp</result></action>2. 第二种实现方法:1) 业务类在Spring配置文件中配置,业务逻辑控制器类不需要配置,Struts2的Action像没有整合Spring之前一样配置,<action>的class属性指定业务逻辑控制器类的全限定名。2) 业务逻辑控制器类中引用的业务类不需要自己去初始化,Struts2的Spring插件会使用bean的自动装配将业务类注入进来,其实业务逻辑控制器也不是Struts2创建的,而是Struts2的Spring插件创建的。默认情况下,插件使用by name的方式装配,可以通过增加Struts2常量来修改匹配方式:设置方式为:struts.objectFactory.spring.autoWire = typeName,可选的装配参数如下:a) name:等价于Spring配置中的autowire=”byName”,这是缺省值。b) type:等价于Spring配置中的autowire=”byType”。c) auto:等价于Spring配置中的autowire=”autodetect”。d) constructor:等价于Spring配置中的autowire=” constructor”。四、如果原先在Struts2中使用了多个object factory,则需要通过Struts2常量显式指定object factory,方式如下:struts.objectFactory = spring;如果没有使用多个object factory,这一步可以省略。五、可以通过设增加Struts2常量来指定是否使用Spring自身的类缓存机制。可以设定的值为true或false,默认为true。设置方式为:struts.objectFactory.spring.useClassCache = false。六、至此,完成了两种方式的整合。比较这两种整合方式,其本质是一样的。不同之处在于,使用第二种自动装配的方式时,由于没有在Spring中配置业务逻辑控制器,所以需要对其配置一些AOP之类的内容时就很难实现了。
④ 恳请spring配置文件逐条详解,详见问题补充。
逐条解释肯定解释不完,就跟你讲一下事务管理的相关理解吧。
下面是Spring较早时期的一个配置,能体现出一点底层的东西。
<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><propertyname="driverClass"value="com.mysql.jdbc.Driver"/><propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/"/><propertyname="user"value="root"/><propertyname="password"value="fuhaiwei"/></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="mappingResources"value="com/fuhaiwei/domain/domain.xml"/><propertyname="hibernateProperties"><props><propkey="hibernate.hbm2ddl.auto">update</prop><propkey="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop></props></property></bean><beanid="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean>//看这个,这个是关键,事务管理是靠AOP实现的,下面是一个拦截器。<beanid="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor"><propertyname="transactionManager"ref="transactionManager"/><propertyname="transactionAttributes">//指定事务传播属性,例如getUser给予只读事务<props><propkey="get*">PROPAGATION_REQUIRED,readOnly</prop><propkey="add*">PROPAGATION_REQUIRED</prop><propkey="update*">PROPAGATION_REQUIRED</prop><propkey="update*">PROPAGATION_REQUIRED</prop></props></property></bean>//这个也是关键,指定那些Bean会启动上面的拦截器。<beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><propertyname="interceptorNames"value="transactionInterceptor"/>//指定所有Service结尾的Bean会启用事务管理。<propertyname="beanNames"value="*Service"/></bean>//现在使用的<tx:annotation-driventransaction-manager="transactionManager"/>//直接替代了上述两条配置。
从上面的配置可以看出,Spring的事务管理要发挥作用有一些条件。
一:这个类要由Spring来管理,也就是说配置成一个Bean,并且程序中实际使用的必须是由容器注入的。(因为事务管理的实现原理是AOP代理,我们实际使用的UserService对象将是一个代理对象)
二:我们应该告诉Spring,我们想在那些类或者说Bean上启用事务。
三:我们应该告诉Spring,我们想在那些方法上启用事务。(因为AOP代理一般是使用JDK动态代理机制,而JDK想要代理的方法,必须实现于一个接口,所以我们经常发现由Spring管理的项目,其Service和Dao常常都有接口类)
四:我们在Dao中,获取Session时,应该用getCurrentSession()方法,而不是openSession()方法,因为openSession()方法会打开一个全新的Session,且不与线程关联。事务管理器到时候无法获取这个Session也就无法管理事务。而如果使用getCurrentSession()方法,这个方法获取的事务是与线程关联的,到时候事务管理器就可以打开事务,提交事务,或者回滚事务。
五:这是的transactionInterceptor一个片段
publicObjectinvoke()throwsThrowable{//如有必要打开事务。TransactionInfotxInfo=createTransactionIfNecessary(tm,txAttr,joinpointIdentification);ObjectretVal=null;try{//运行被代理类的实际方法,也就是我们的Service类的某个方法retVal=invocation.proceed();}catch(Throwableex){//如果抛出异常就回滚事务(默认配置情况下)(txInfo,ex);throwex;}finally{cleanupTransactionInfo(txInfo);}//如果没有异常就提交事务(txInfo);returnretVal;}
最后总结,这里面设计到很多个知识点,如什么是AOP,SpringAOP实现的方法是什么,什么是JDK动态代理,什么是Spring自动代理工厂,很多很多,不知道你掌握的情况,所以有问题请追问吧。
⑤ spring有哪些配置文件
spring 一般不说有哪些配置文件,都是问有哪些配置项的,即配置哪些bean比如datasource,sqlsessiontemplate等等。。。。还有像spring-boot,推崇0配置了,除了一个yml或者properties其他的都是自动配置
⑥ SpringBoot的配置文件有哪几种格式
SpringBoot中的配置文件来主要有三种格式,自properties、yaml、和xml方式。- 其中properties格式配置文件后缀是.properties,配置项为:server.port = 9090- yaml格式配置文件后缀是.yml,配置项是:server.port: 9090在SpringBoot中,使用最广泛的配置文件是yaml,yaml之所以流行,除了他配置语法精简之外,还因为yaml是一个跨编程语言的配置文件。在SpringBoot中,除了yaml之外,properties也比较常用,但是XML几乎不用,看得出来Spring团队非常痛恨XML配置文件!认为它不是一个好的语言。如果你对常见的配置文件有哪几种格式不熟悉,就去黑马程序员官网视频库看免费视频。
⑦ spring的配置文件放在什么位置
这个不是一定的,随你自己的意思,你可以放在WEB-INF里,也可以放在classpath下。只需在配置web.xml时指定位置即可。<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:beans.xml</param-value></context-param>上面就是web.xml中对spring容器的初始化配置,<context-param>中<param-value>中的classpath:beans.xml 即是spring配置文件beans.xml的位置(classpath下,在myeclipse的工程中是src目录下)
⑧ Spring MVC 配置文件讲解
使用@Controller定义一个控制器 使用@RequestMapping映射请求 使用@RequestParam绑定请求参数到方法参数 使用@ModelAttribute提供一个从模型到数据的链接 使用@SessionAttributes指定存储在会话中的属性<context:annotation-config/>他的作用是隐式地向 Spring 容器注册、、、 这 4 个BeanPostProcessor。例如:如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明。如果想使用@PersistenceContext注解,就必须声明的Bean。如果你想使用@Autowired注解,那么就必须事先在 Spring 容器中声明 Bean。传统声明方式如下:<bean class="org.springframework.beans.factory.annotation. "/> 如果想使用 @Required的注解,就必须声明的Bean。同样,传统的声明方式如下:<bean class="org.springframework.beans.factory.annotation."/> 记得,使用注解一般都会配置扫描包路径选项<context:component-scan base-package=”XX.XX”/> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>这个配置常常见于web.xml文件中<load-on-startup>1</load-on-startup>是启动顺序,让这个Servlet随Servletp容器一起启动。 <url-pattern>*.do</url-pattern> 会拦截*.do结尾的请求。<servlet-name>dispatcherServlet</servlet-name>这个Servlet的名字是dispatcherServlet,可以有多个DispatcherServlet,是通过名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存的ServletContext中和Request对象中,关于key,以后说明。 在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[dispatcherServlet]-servlet.xml 的配置文件,生成文件中定义的bean。<init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value> </init-param>指明了配置文件的文件名,不使用默认配置文件名,而使用springMVC.xml配置文件。其中<param-value>**.xml</param-value> 这里可以使用多种写法1、不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml2、<param-value>/WEB-INF/classes/springMVC.xml</param-value>3、<param-value>classpath*:springMVC-mvc.xml</param-value>4、多个值用逗号分隔springMVC-mvc.xml 配置文件片段讲解<context:annotation-config/><!– 自动扫描的包名 –> <context:component-scan base-package="com.iflysse"/> <!– 默认的注解映射的支持 –> <mvc:annotation-driven/><!– 视图解释类 –> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/><!–可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 –> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> </bean> <mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册与 两个bean,是spring MVC为@Controllers分发请求所必须的。并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。后面,我们处理响应ajax请求时,就使用到了对json的支持。后面,对action写JUnit单元测试时,要从spring IOC容器中取与 两个bean,来完成测试,取的时候要知道是<mvc:annotation-driven />这一句注册的这两个bean。<!– json 支持 –> <bean id="" class="org.springframework.http.converter.json."> <property name="objectMapper" ref="commonObjectMapper"/> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!– ObjectMapper json转换 –> <bean id="commonObjectMapper" class="cn.com.starit.util.CommonObjectMapper"/>
⑨ Spring加载配置文件(org.springframework.beans.factory.BeanDefinitionStoreException)
1、首先手动加载Spring配置文件有两个类,分别是;两个类的区别。
⑩ 修改spring scope的默认配置
可以修改的,在每个spring的xml配置文件的开头处(spring支持多文件配置),<beans>标记内修改你需要的属性,则此属性将对该文件下的所有<bean>生效。如果底下某个bean想要特立的属性,比如<beans>声明为prototype,而某个bean想要声明为singleton,则在该<bean/>的配置内加上singleton=true即可