一、Spring 中的常见注解。

1、声明 Bean 的注解。

  • @Component:该注解是一个泛化概念,仅仅表示一个组件对象(Bean),没有明确的角色。
  • @Repository:该注解用于数据访问层(DAO)的类标识符为Bean,即注解数据访问层Bean,其功能与@Component()相同。
  • @Service:该注解用于标注一个业务逻辑组件类(service层),其功能与Component()相同。
  • @Controller:该注解用于标注一个控制器组件类(Spring MVC 的Controller),其功能与Component()相同。
  • @RunWith(SpringJUnit4ClassRunner.class):用于指定junit运行环境,spring提供了org.springframework.test.context.junit4.SpringJUnit4ClassRunner作为Junit测试环境。
  • @ContextConfiguration(“classpath:applicationContext.xml”):该注解指定创建容器时使用的配置文件。
  • @Configuration:用于定义配置类。
  • @Component-Scan(basePackages = {“dao”,”service”}):配置扫描包。
  • @PropertySource(value={classpath:jdbc.properties},ignoreResourceNotFound=true):可配置一个或多个配置文件。多个配置的Value:value={classpath:jdbc.properties,”xxx”,”xxx”}

2、注入Bean的注解。

  • @Autowired:默认按照Bean的类型进行自动装配。该注解可以对类或成员变量、方法及构造方法进行标注,完成自动装配的工作。
  • @Resource:该注解默认按照名称进行装配。当找不到与名称匹配的Bean时才会按照类型来装配注入。该注解有name(实例名称)、type(实例类型)两个属性。
  • @Qualify:该注解与@Autowired配合使用。当@Autowired需要按照名称来装配注入时,Bean的实例名称由@Qualify中的参数指定。

3、声明方法的注解。

  • @Override:被标注的方法重载了父类的方法。
  • @PostConstruct:该注解在对象被创建后调用标注的方法。可用作初始化。
  • @PreDestroy:该注解在对象销之前调用标注的方法。
  • @Test:可对被标注的方法进行单元测试。
  • @Bean:在方法上使用@Bean注解,方法就会创建一个Bean对象交给Spring管理,且产生这个bean对象的方法在整个spring的生命周期中只会被调用一次,调用完成之后spring会将这个bean对象放在自己的ioc容器中。

    @Bean(initMethod=”initService’,destroyMethod=”destroyService”):@Bean注解的initMethod和destroyMethod属性可对Bean进行初始化和销毁。构造方法之后、销毁之前执行。

4、声明参数的注解。

  • @Value:该注解将参数指定的值动态注入到 Bean 中。@Value(“xxx”)、@Value(“${jdbc.xxx}’)等。

5、AspectJ注解。

  • @Aspect:用于定义一个切面,注解在切面类上。
  • @Pointcut:用于定义切入点表达式。在使用时,需要定义一个切入点的方法,该方法是一个返回值为viod,且方法体为空的普通方法。
  • @Before:用于定义前置通知,目标方法运行之前调用。在使用时,通常为其指定Value属性值,该值可以是已有的切入点,也可以直接定义切入点表达式。
  • AfterReturning:用于定义后置返回通知。在目标方法运行之后调用,如果出现异常则不会调用。使用时同上。
  • @Around:用于定义环绕通知。在目标方法运行之前和运行之后都调用。
  • @AfterThrowing:用于定义异常通知。如果出现异常,就会调用。使用时同上,另外还有一个Throwwing属性用于访问目标方法抛出的异常,该属性值与异常通知方法中同名的形参一致。
  • @After:用于定义后置(最终)通知。在目标方法运行之后调用(无论是否出现异常都会调用)。

6、基于@Transactional注解的声明式事务管理。

  • @EnableTransactionManagement:在配置类上开启声明事务的支持,同事为数据源添加事务管理器。
  • @Transactional:可以作用在接口、接口方法、类以及类方法上,但不建议使用在接口或接口方法上,因为只有在使用基于接口的代理时它才会生效。当作用于类上时,该类下的所有public方法都将具有该类型的事务属性,同时,也可以在方法级别使用该注解来覆盖类级别的定义 。

  @Transactional的属性:

  propagation:定义了事务的生命周期,主要有以下选项:

  1. Propagation.REQUIRED:需要事务支持的方法A被调用时,没有事务新建一个事务。当在方法A中调用另一个方法B时,方法B将使用相同的事务。如果方法B发生异常需要数据回滚时,整个事务数据回滚。
  2. Propagation.REQUIRED_NEW:对于方法A和B,无论是否有事务都会开启一个新的事务;方法B有异常不会导致方法A回滚。
  3. Propagation.NESTED:和Propagation.REQUIRED_NEW类似,仅支持JDBC,不支持JPA或Hibernate。
  4. Propagation.SUPPORTS:方法调用时有事务就使用事务,没有事务就不创建事务。
  5. Propagation.SUPPORTED:强制方法在十五中执行,若有事务i,在方法调用到结束阶段事务都将会被挂起。
  6. Propagation.NEVER:强制方法不在事务中执行,若有事务则抛出异常。
  7. Propagation.MANDATORY:强制方法在事务中执行,若无事务则抛出异常。

  isolation(事务隔离):决定了事务的完整性,处理再多事务对相同数据下的处理机制,主要包括以下隔离级别(前提是当前数据库是否支持):

  1. Isolation.READ_UNCOMMITTED:对于在事务A中修改了一条记录但没有提交的事务,在事务B中可以读取到修改后的记录。可导致脏读、不可重复读以及幻读。
  2. Isolation.READ_COMMITTED:只有当在事务A中修改了一条记录且提交事务后,事务B才可以读取到提交后的记录,防止脏读,但可能导致不可重复读和幻读。
  3. Isolation.REPEATABLE_REDA:不仅能实现Isolation.READ_COMMITTED的功能,而且还能阻止当 事务A读取了一条记录,事务B将不允许修改该条记录;阻止脏读和不可重复读,但可出现幻读。
  4. Isolation.SERIALIZABLE:此级别下事务是顺序执行的,可以避免上述级别缺陷,但开销较大。
  5. Isolation.DEFAULT:使用当前数据库的默认隔离级别。如Oracle和SQL Server是READ_COMMITTED;MySQL是REPEATABLE_READ。

  timeout:指定事务过期时间,默认为当前数据库的事务过期时间。

  readOnly:指定当前事务是否是只读事务。

  rollbackFor:指定哪个或那些异常可以引起事务回滚(Class对象数组,必须继承自Throwable)。

    捕获异常打方法如下:

  1. 修改@Transactional注解:@Transactional(rollbackFor={Exception.class})指定回滚生效的异常类,多个异常类逗号分隔。
  2. 在catch语句中添加“throw new RuntimeException();”语句。

   注意:在实际工程应用中,在catch语句中添加“TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();”语句即可。不需要在@Transactional注解中添加rollbackFor属性。

  rollbackForClassName:指定哪个或那些异常可以引起事务回滚(类名数组,必须继承自Throwable)。

  noRollBackFor:指定哪个或那些异常不可以引起事务回滚(Class对象数组,必须继承自Throwable)。

  NoRollbackForClassName:指定哪个或那些异常不可以引起事务回滚(类名数组,必须继承自Throwable)。

 

原文地址:http://www.cnblogs.com/sfwu/p/16918876.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性