Spring常用注解详解
组件类注解
(1) @Component :标准一个普通的spring Bean类。
(2)@Repository:标注一个DAO组件类。
(3)@Service:标注一个业务逻辑组件类。
(4)@Controller:标注一个控制器组件类。
装配bean时常用的注解
(1) @Autowired:可用于为类的属性、构造器、方法进行注值
(2) @Resource:不属于spring的注解,使用该annotation为目标bean指定协作者Bean。
(3) @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
配置相关注解
(1) @Configuration 标注一个配置类。
(2) @Bean 标注一个方法,用于配置信息初始化
MVC模块注解
(1) @Controller 表明该类会作为与前端作交互的控制层组件
(2) @RequestParam
设置在方法参数前,属性有:
name=“xxx” 设置前台传过来的参数
defaultValue="ste" 设置默认值
required=true 设置是否必传,true必传
(3) @PathVariable 绑定URI模板变量值,是用来获得请求url中的动态参数的
设置在方法参数前,属性有:
value = "type" 与@RequestMapping("/zyh/{type}")一起用
(4) @RequestBody 设置在方法参数前,一般情况下来说常用其来处理application/json类型,json用bean接收。
(5) @ResponseBody 设置在方法上,返回值bean转json数据
(6) @RestController 设置在类上
当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
(7) @ModelAttribute
设置在方法上,会在Controller每个方法执行之前都执行
设置在方法参数前,@ModelAttribute("attributeName") 从前面的 Model
中提取对应名称的属性。
(8) @RequestMapping("/demo")
设置在类或方法上,访问路径为: 类上标的路径+方法上标的路径
(9) @SessionAttributes(“attributeName”)
SpringMVC 会在执行方法之前,自动从 session 中读取 key 为 attributeName
的值,并注入到 Model
中。
事务模块注解
(1) @Transactional
属性 | 类型 | 描述 |
---|---|---|
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 | 不会导致事务回滚的异常类名字数组 |
全局异常处理
(1) @ControllerAdvice:包含@Component。设置在类上,可以被扫描到。统一处理异常。
(2)@ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行以下方法。
自定义注解
自定义注解定义:Java文件叫做Annotation,用@interface表示。
package annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//类上标注元注解
@Documented
@Inherited
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Init{
//定义属性,设置默认值
public String value() default "";
}
元注解详解:
(1) @Retention 注解的保留策略,相关属性
@Retention(RetentionPolicy.SOURCE) // 注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
(2) @Target 注解的作用目标
@Target(ElementType.TYPE) // 接口、类、枚举、注解
@Target(ElementType.FIELD) // 字段、枚举的常量
@Target(ElementType.METHOD) // 方法
@Target(ElementType.PARAMETER) // 方法参数
@Target(ElementType.CONSTRUCTOR) // 构造函数
@Target(ElementType.LOCAL_VARIABLE) // 局部变量
@Target(ElementType.ANNOTATION_TYPE) // 注解
@Target(ElementType.PACKAGE) // 包
(3) @Documented 注解包含在javadoc中
(4) @Inherited 注解可以被继承: