(摘录)关于spring的注解(持续更新中)
2014-07-27 20:56
393 查看
<span style="font-size:14px;"> 关于注解: 1.@Resource 感觉要是new就在代码头上用到 2.@Scope("prototype");域多为非单例 3.@Component----> @Service ---->多用在service的实现类中 @Controller------>用在Action中 @Repository ------->多用在dao的实现类中 </span>
简介:
@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性,下面我们把她分成三类进行说明。
1、 value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
2、 consumes,produces;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、 params,headers;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
@responsebody
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
好处是能实现某些功能,坏处是让你对着电脑很长时间了,小心辐射!
@RequestBody
将 HTTP 请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。
@Repository
属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过<context:component-scan/>实现。
@Component
是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
@Service
通常作用在业务层,但是目前该功能与 @Component 相同。
@Constroller
通常作用在控制层,但是目前该功能与 @Component 相同。
@Autowired与@Resource的区别
@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下: @Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。 |
窗体顶端
窗体底端
@Transactional
窗体顶端在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。
窗体顶端
Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked 如果遇到checked意外就不回滚。
窗体顶端
1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
4000
在整个方法运行前就不会开启事务
还可以加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样就做成一个只读事务,可以提高效率。
各种属性的意义:
REQUIRED:业务方法需要在一个容器里运行。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。
NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。
REQUIRESNEW:不管是否存在事务,该方法总汇为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建。
MANDATORY:该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出例外。
SUPPORTS:该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行。
NEVER:该方法绝对不能在事务范围内执行。如果在就抛例外。只有该方法没有关联到任何事务,才正常执行。
NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效
窗体底端
Spring生命周期
窗体底端
1. 容器启动,实例化所有实现了BeanFactoyPostProcessor(在容器实际实例化任何其它的bean之前读取配置元数据,并有可能修改它)接口的类。他会在 任何普通Bean实例化之前加载.
2. 实例化剩下的Bean,对这些Bean进行依赖注入。
3. 如果Bean有实现BeanNameAware(注入Bean的名字)的接口那么对这些Bean进行调用
4. 如果Bean有实现BeanFactoryAware(注入工厂)接口的那么对这些Bean进行调用
5. 如果Bean有实现ApplicationContextAware(这个类可以直接获取spring配置文件中,所有有引用到的bean对象)接口的那么对这些Bean进行调用
6. 如果配置有实现BeanPostProcessor(如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理)的Bean,那么调用它的 postProcessBeforeInitialization方法
7. 如果Bean有实现InitializingBean(为bean提供了初始化方法的方式)接口那么对这些Bean进行调用
8. 如果Bean配置有init属性,那么调用它属性中设置的方法
9. Bean正常是使用
10. 调用DisposableBean(销毁)接口的destory方法
11. 调用Bean定义的destory方法
相关文章推荐
- spring-boot中的注解(持续更新)
- Spring各个组件常用注解含义(持续更新ing)
- Spring常用注解(持续更新)
- 关于注解的使用(持续更新...)
- 关于spring和springmvc使用过程中的问题帖(持续更新)
- webwork+spring 配置异常---持续更新
- 关于功能自动化测试的一些想法(持续更新ing)
- 『Spring.NET』常见错误整理(持续更新)
- spring 笔记持续更新2012年9月16日 11:54:45
- OA中总结:s:select,关于使用modelDriven,项目分层,@Transactional,jspf,各个层上配置注解交给spring管理的方法,简单的OGNL表达式写法
- 关于团队建设(持续更新)
- 关于网页设计中的一些有趣网站--(持续更新)
- 关于EYQiPa 持续更新
- remarks of 性能测试 (持续更新) 关于性能测试的思考
- Play 2.0 中文资料--翻译附注解(持续更新中)
- 关于《ASP.NET 3.5 揭秘 卷1》里的部分错误(持续更新)
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs系列总结(持续更新)
- 关于MSSQL 2005的驱动更新问题的摘录
- 面试题(关于数据结构和算法)及个人解答(持续更新中)
- 关于Oracle,持续更新