Spring中的注解

1.IOC的注解实现

首先定义bean组件的注解,Spring从2.0版本开始引入注解的配置方式,将Bean的配置信息和Bean实现类结合在一起,进一步减少了配置文件的代码量。在实际的开发过程中,注解使用的较为广泛。
这里我们用到的注解有如下几个:

注解解释
@Repository用于标注DAO类
@Service用于标注业务类
@Controller用于标注控制器类
@Component不好区分层次的功能类

注解需要添加在功能类头部。比如实现类就是功能类,而接口不是功能类。这里需要特别注意的是@Component可以替代@Repository、@Service,但是不能替代@Controller。
其次装配bean组建的注解,这就必须使用到@Autowired或者@Resource注解。
最后注解功能要想实现,必须要加载注解定义的bean组件,即在配置文件中添加如下配置:

<!-- 扫描base-package这个包,或者子包下的类。如果发现类的头部有注解@Component,将此类初始化,默认调用无参的构造方法
并且对象的名字,默认是类名首字母小写 -->
<context: component-scan base-package="com.fciet"/>

2.AOP的注解实现

注解方式实现aop我们主要分为如下几个步骤:

  1. 在切面类(为切点服务的类)前用@Aspect注释修饰,声明为一个切面类。切面类中包含了具体的功能。
  2. 用@Pointcut注释声明一个切点,定义切入的位置。
  3. 在对应的方法前用对应的通知类型注释修饰,将对应的方法声明称一个切面功能,为切点而服务
  4. 在Spring配置文件中开启 aop注释自动代理。如:<aop:aspectj-autoproxy/>
    实现代码如下所示:
<!-- 注解aop的配置,必须开启代理,默认是false -->
<aop:aspectj-autoproxy expose-proxy="true"/>

因为要生成 aop的对象,并且切面还要调用aop对象的方法,所以加@Component,@Aspect。

@Component
@Aspect
public class MyAop {
}

定义切点,明确切入的表达式和切点的名字

@Pointcut("execution(public * com.gxy.service.impl.*.*(..))")
public void myPointuct(){
}

定义注解实现的advice,@Before,@ AfterReturning,@ AfterThrowing,@After,@Around

@Before("myPointuct()")
public void before(){
     System.out.println("开始事务");
 }
 @AfterReturning("myPointuct()")
 public void afterReturning(){
     System.out.println("正常执行结束,关闭事务");
 }

3.声明式事务的注解实现

在事务中使用到的注解是@Transactional,包含属性如下:

属性解释描述
valueString可选的限定描述符,指定使用的事务管理器
propagationenum: Propagation可选的事务传播行为设置
isolationenum: Isolation可选的事务隔离级别设置
readOnlyboolean读写或只读事务,默认读写
timeoutint (in seconds granularity)事务超时时间设置
rollbackForClass对象数组,必须继承自Throwable导致事务回滚的异常类数组
rollbackForClassName类名数组,必须继承自Throwable导致事务回滚的异常类名字数组
noRollbackForClass对象数组,必须继承自Throwable不会导致事务回滚的异常类数组
noRollbackForClassName类名数组,必须继承自Throwable不会导致事务回滚的异常类名字数组

@Transactional可以用于接口、接口方法、类及类方法上。当作用于类上时,该类的所有public方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
虽说@Transaction 注解可以定义在接口、接口方法、类及类方法上,但是Spring建议不要在接口或者接口方法上使用该注解,因为该注解只有在使用基于接口代理时才会生效。@Transaction注解应只被作用到public方法上,这是由Spring AOP的本质决定的。若在 protected、private或者默认可见性的方法上使用@Transaction注解,将被忽略,不起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值