8. Spring 注解 大全

本文详细介绍Spring框架中的核心注解,包括bean、aop和tx等注解的使用方法及应用场景,帮助开发者更好地理解和掌握Spring注解的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Spring 注解

--------------------------------------------------------------------------------------------

常用:

1. bean : 开启 <context:annotation-config/>

    (1) @Component 声明对象

    (2) @Controller声明对象 >> MVC 网页提交类 必须用次注解

    (3) @Service声明对象

    (4) @Repository声明对象

        ① @Require 根据id

        ② @Autowired 根据name

2. aop : 开启 <aop:aspectj-autoproxy/>

    (1) @Aspect 声明aop

        ① @pointcut 声明切点

            1) @Before 之前

            2) @After 之后

            3) @Around环绕

            4) @AfterReturning最终

3. tx : 开启 <tx:annotation-driven transaction-manager="txManager" />

    (1) @Transaction 声明

            ① propagation : REQUIRED

-------------------------------------------------------------------------------------------------------------------------------------------------------

bean注解(实体类)

开启注解创建bean

`<context:component-scan base-package="cn.po"/>`

创建bean的注解

注解

描述

@Component

基础

@Controller

WEB层

@Service

业务层

@Repository

持久层

l 这四个表示作用一致,其区别是区分创建的层次,暂时没有功能上的意义

开启注解注入

`<context:annotation-config/>`

主要注入注解

注解

描述

@Required

@Required 注解应用于 bean 属性的 setter 方法。

@Autowired

@Autowired 注解可以应用到 bean 属性的 setter 方法,非 setter 方法,构造函数和属性。

@Qualifier

通过指定确切的将被连线的 bean,@Autowired 和 @Qualifier 注解可以用来删除混乱。

JSR-250 Annotations

Spring 支持 JSR-250 的基础的注解,其中包括了 @Resource,@PostConstruct 和 @PreDestroy 注解。

@Required 注解

@Required注解用于bean属性的setter方法,它表明受影响的bean属性在配置时必须放在XML文件中,否则容器会抛出一个BeanInitializationException异常

l @Required注解的方法,必须注入属性

l 标记范围:setter方法

@Autowired 注解

@Autowired注解对它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作

替换xml的`<property name="属性名" value=" 属性值"/>`

l @Autowired注解的方法,可以自动装配改方法的对应的属性值

l 标记范围:setter方法和属性

Required : 强调ById;

Autowired: 强调ByName;

@Autowired (required=false)

默认情况下,@Autowired 注释意味着依赖是必须的,它类似于 @Required 注释,然而,你可以使用 @Autowired  required=false 选项关闭默认行为。

l @Autowired方法也具有必须注入的属性

l @Autowired(reqyured=fakse)设置可以不必注入属性

@Qualifier注解

@Qualifier注解当你创建多个bean时,并且想要用一个属性进行注入.可以同时使用@Qualifier和@Autowired指定哪个是真正的bean装配.

l @Qualifier(“指定bean对象名”),指定了改属性必须装配的对象

AOP注解(切面)

开启AOP注解

`<aop:aspectj-autoproxy/>`

l 需要提供的jar包

1. aspectjrt.jar

2. aspectjweaver.jar

3. aspectj.jar

4. aopalliance.jar

声明@aspect

@Aspect在方法之前

l 表明该方法是一个切面(即插入的一个增强的方法)

声明切入点@Pointcut

@pointcut(execution(* com.biz.*.*(..)))

l 在@Aspect声明的类中声明哪些类和方法是需要加入切点(位置在第一个方法之前)

声明通知方式

注解

描述

示例

@Before

之前通知

@Before("方法名()")

@After

之后通知

@After("方法名()")

@AfterReturning

后置通知

@AfterReturning(pointcut = "方法名()", returning="retVal")

@AfterThrowing

异常通知

@AfterThrowing(pointcut = "方法名()", throwing="ex")

@Around

环绕通知

@Around("方法名()")

 

@Transaction注解(事务)

开启事务注解

`<tx:annotation-driven transaction-manager="txManager" />`

 

声明@Transaction

使用范围

描述

接口\接口方法

public的接口和方法

必须使用基于接口的代理

类\类方法

public的类和方法

 

 

 

 

 

 

@Transaction 的属性

属性

类型

描述

value

String

可选的限定描述符,指定使用的事务管理器

propagation

enum: Propagation

可选的事务传播行为设置

isolation

enum: Isolation

可选的事务隔离级别设置

readOnly

boolean

读写或只读事务,默认读写

timeout

int (in seconds granularity)

事务超时时间设置

rollbackFor

Class对象数组,必须继承自Throwable

导致事务回滚的异常类数组

rollbackForClassName

类名数组,必须继承自Throwable

导致事务回滚的异常类名字数组

noRollbackFor

Class对象数组,必须继承自Throwable

不会导致事务回滚的异常类数组

noRollbackForClassName

类名数组,必须继承自Throwable

不会导致事务回滚的异常类名字数组

事务的隔离级别 ---> isolation=” ”

 

l 事务的隔离级别是指若干个并发的事务之间的隔离程度,如表定义了五种隔离级别:

翻译

描述

默认

DEFAULT

表示使用底层数据库的默认隔离级别.通常是指的READ_COMMITTED

读未提交的

READ_UNCOMMITTED

表示一个事务可以读取,另一个事务修改但是没有提交的数据.

该级别不能防止脏读去\不可重复读取/幻读,因此很少使用.

读提交的

READ_COMMITTED

表示一个事务只能读取已经提交的数据.

推荐使用的隔离

可重复读

REPEATABLE_READ

表示一个事务在整个过程中可以多次重复执行摸个查询,并且每次返回的记录都相同,该级别可以防止脏读\不可重复读.

序列化

SERIALIZABLE

所有的事务依次逐个执行,这样事务之间就不会产生干扰,但是及其影响性能.

 

事务的传播行为 ---> propagation=” ”

l 所谓的事务的传播行为是指,如果在事务开始之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为.Transaction中指定了如表几种传播行为:

翻译

描述

要求

REQUIRED

如果当前存在事务,则加入该事务;

如果没有,则创建一个事务;

需要新的

REQUIRES_NEW

创建一个新的事务,如果当前存在事务,则把当前事务挂起;

支持

SUPPORTS

如果当前存在事务,则加入该事务;

如果没有事务,则以非事务的方法运行;

不支持

NOT_SUPPORTED

以非实物的方式运行,如果当前存在事务,则把当前事务挂起;

从来没有

NEVER

以非实物进行运行,如果当前存在事务,则抛出异常

强制性的

MANDATORY

如果当前存在事务,则加入事务;

如果当前没有事务,则抛出异常;

嵌套的

NESTED

如果当前存在事务,则创建事务作为当前事物的嵌套事务来运行;

如果当前没有事务,则创建一个事务;

事物的只读性 ---> redOnly

l 表名该事务是否可以修改数据

l 默认 : 读写

l 建议不写,使用默认

事务的超时 ---> timeout=” ”

l 指一个事务允许执行的最长时间,如果超时则回滚事务.

l 单位 : 秒

l 默认 : none (没有限制)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值