Spring注解和xml对比

来自ling
跳转至: 导航搜索

spring 注解用法搜集

博客分类: 开源框架

==============注册==================http://www.2cto.com/kf/201207/140774.html 标注到类头部,将此类注册到spring来管理创建 @Repository 数据持久层 @Service 业务层Bean @Controller 表现层Bean @Component不推荐使用 ======其他属性1 <bean name="" class="" lazy-init=“true” //是否延迟初始化 scope=“prototype” //bean的生命周期 depends-on=“其他bean“ //依赖其他bean /> 在Spring中也有相应的注解去对应 @Lazy @Scope @DependsOn ======其他属性2 <bean name="" class="" init-method=“init“ //初始化方法 destroy-method=“close“ //析构方法 /> 在Spring中也有相应的Bean去对应,当然,这两个注解是jdk里内置的 @PostConstruct @PreDestroy

========注入============

@Autowired @@Resource 根据bean 类型从spring 上下文中进行查找 1 它可以放在属性、方法和构造方法头上 2 如果某个接口的实现类在Spring容器中唯一的话,仅使用@Autowired就可以正确注入,如: @Autowired private SampleDao dao; 3 如果某个接口的实现类在Spring容器中不唯一 用@Qualifier来指定注入Bean的名字,如 @Autowired @Qualifier(“sampleDaoImpl”) private SampleDao dao;

4 @Primary在多个Bean之中指定哪个为最优先者,注意它不是跟@Autowired配合使用,而是跟@Service配合使用,如 @Service @Primary SampleDaoImpl

=============通知==============

Spring使用的AOP注解分为三个层次: @Aspect放在类头上,把这个类作为一个切面,但是这个类一定要显式的注册在Spring容器中。 @Pointcut放在方法头上,定义一个可被别的方法引用的切入点表达式。 5种通知。 www.2cto.com @Before,前置通知,放在方法头上。 @After,后置【finally】通知,放在方法头上。 @AfterReturning,后置【try】通知,放在方法头上,使用returning来引用方法返回值。 @AfterThrowing,后置【catch】通知,放在方法头上,使用throwing来引用抛出的异常。 @Around,环绕通知,放在方法头上,这个方法要决定真实的方法是否执行,而且必须有返回值

=============事物传播属性==============

@Transactional

 属性                     类型                 描述
 传播性                 枚举型               可选的传播设置
            Propagation 

 隔离性               枚举型                 可选的隔离级别(默认值:
             Isolation              ISOLATION_DEFAULT)

 只读行               布尔型                 读写型事物 vs 只读性事物

 超时                  int 秒为单位           事物超市设置

回滚异常类(rollbackFor) 一组Class类的 一组异常类,遇到时必须进行回滚。

           实例,必须是Throwable  默认情况下checked exceptions不进行
                       回滚,仅unchecked exceptions即(RuntimeException的子类)
                       才进行事务回滚。

回归异常类名 一组Class类的名字, 一组异常类名,遇到时 必须 进行回滚 rollbackForClassname 必须是Throwable的子类

           的子类

不回滚异常类 一组Class类的名字, noRollbackFor 必须是Throwable的子类 一组异常类名,遇到时 必须不 回滚。


不回滚异常类名 一组Class类的名字, noRollbackForClassname 必须是Throwable的子类 一组异常类,遇到时,必须不回滚


事物 http://blog.csdn.net/zhaofsh/article/details/6285869 事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 例子: @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需要事物时: @Transactional public class TestServiceBean implements TestService {

   private TestDao dao;
   
   public void setDao(TestDao dao) {
       this.dao = dao;
   }
   
   @Transactional(propagation = Propagation.NOT_SUPPORTED)
   public List<Object> getAll() {
       return null;
   }
   

}

事物传播行为介绍: @Transactional(propagation=Propagation.REQUIRED) 如果有事务, 那么加入事务, 没有的话新建一个(默认情况下) @Transactional(propagation=Propagation.NOT_SUPPORTED) 容器不为这个方法开启事务 @Transactional(propagation=Propagation.REQUIRES_NEW) 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务 @Transactional(propagation=Propagation.MANDATORY) 必须在一个已有的事务中执行,否则抛出异常 @Transactional(propagation=Propagation.NEVER) 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反) @Transactional(propagation=Propagation.SUPPORTS) 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务. 事物超时设置: @Transactional(timeout=30) //默认是30秒 事务隔离级别: @Transactional(isolation = Isolation.READ_UNCOMMITTED) 读取未提交数据(会出现脏读, 不可重复读) 基本不使用 @Transactional(isolation = Isolation.READ_COMMITTED) 读取已提交数据(会出现不可重复读和幻读) @Transactional(isolation = Isolation.REPEATABLE_READ) 可重复读(会出现幻读) @Transactional(isolation = Isolation.SERIALIZABLE) 串行化 MYSQL: 默认为REPEATABLE_READ级别 SQLSERVER: 默认为READ_COMMITTED 脏读 : 一个事务读取到另一事务未提交的更新数据 不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事务已提交的更新数据. 相反, "可重复读"在同一事务中多次 读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据 幻读 : 一个事务读到另一个事务已提交的insert数据