注解实际开发的应用

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   注解可以被继承:

  

猜你喜欢

转载自blog.csdn.net/qq_41609208/article/details/82250642