【黑马程序员】java高频面试题系列十二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【黑马程序员】Java高频面试题系列:十二
5、Spring 注解
Spring 在2.5 版本以后开始支持用注解的方式来配置依赖注入。
可以用注解的方式来替代XML 方式的bean 描述,可以将bean 描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即可。
注解注入将会被容器在XML 注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。
注解装配在Spring 中是默认关闭的。
所以需要在Spring 文件中配置一下才能使用基于注解的装配模式。
如果你想要在你的应用程序中使用关于注解的方法的话,请参考如下的配置。
<beans>
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>
在<context:annotation-config/>标签配置完成以后,就可以用注解的方式在Spring 中向属性、
方法和构造方法中自动装配变量。
几种比较重要的注解类型:
@Required:该注解应用于设值方法。
@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。
@Qualifier:该注解和@Autowired 注解搭配使用,用于消除特定bean 自动装配的歧义。
JSR-250 Annotations :Spring 支持基于JSR-250 注解的以下注解,
@Resource 、@PostConstruct 和@PreDestroy。
6、Spring 事务
Spring 支持两种类型的事务管理:
1.编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
2.声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML 配置来管理事务。
Spring 事务配置示例(使用tx 标签配置的拦截器)
<!-- 定义事务管理器(声明式的事务)-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置Advice 通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- 配置切点切面-->
<aop:config>
<aop:pointcut id="interceptorPointCuts"
expression="execution(* com.bluesky.spring.dao.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="interceptorPointCuts" />
</aop:config>
SpringMVC 框架
9.2.1 SpringMVC 的执行流程
9.2.2 SpringMVC 执行流程描述:
1. 用户向服务器发送请求,请求被sssSpringMVC 前端控制器DispatcherServlet 捕获;
2. DispatcherServlet 对请求URL 进行解析,得到请求资源标识符(URI)。
然后根据该URI,调用HandlerMapping获得该Handler 配置的所有相关的对象(包括Handler 对象以及Handler 对象对应的拦截器),最后以HandlerExecutionChain 对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter;(附注:如果成功获得HandlerAdapter 后,此时将开始执行拦截器的preHandler 方法)
4. 提取Request 中的模型数据,填充Handler 入参,开始执行Handler(Controller)。
在填充Handler的入参过程中,根据你的配置,SpringMVC 将帮你做一些额外的工作:HttpMessageConveter:将请求消息(如Json、xml 等数据)转换成一个对象,将对象转换为指
定的响应信息。
数据转换:对请求消息进行数据转换。
如String 转换成Integer、Double 等。
数据根式化:对请求消息进行数据格式化。
如将字符串转换成格式化数字或格式化日期等。
数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult 或Error 中。
5. Handler 执行完成后,向DispatcherServlet 返回一个ModelAndView 对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到SpringMVC 容器中的ViewResolver)返回给DispatcherServlet;
7. ViewResolver 结合Model 和View,来渲染视图;
8. 将渲染结果返回给客户端。