==============注册==================
标注到类头部,将此类注册到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数据
版权声明:本文为博主原创文章,未经博主允许不得转载。