您的位置:首页 > 编程语言 > Java开发

(摘录)关于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方法

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: