https://blog.csdn.net/weixin_51001722/article/details/130996552注解注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。 一、java注解java内置了三种标准注解,定义在java.lang中的注解: 1、@Override表示当前的方法定义将覆盖超类中的方法(重写)。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。 2、@Deprecated若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用 3、@SuppressWarnings用于抑制编译器产生警告信息。 四种元注解 1、@Target表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括: ElemenetType.CONSTRUCTOR-----------------------------构造器声明
ElemenetType.FIELD ----------------------------------域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE------------------------- 局部变量声明
ElemenetType.METHOD ---------------------------------方法声明
ElemenetType.PACKAGE --------------------------------包声明
ElemenetType.PARAMETER ------------------------------参数声明
ElemenetType.TYPE----------------------------------- 类,接口(包括注解类型)或enum声明 2、@Retention表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括: RetentionPolicy.SOURCE-------------注解将被编译器丢弃 RetentionPolicy.CLASS -------------注解在class文件中可用,但会被VM丢弃 RetentionPolicy.RUNTIME ---------VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。 3、@Documented将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。 4、@Inherited允许子类继承父类中的注解 二、MyBaits1.@Insert() 新增 2.@Update() 更新 3.@Delete() 删除 4.@Select() 查询 5.@Result() 实现结果集封装 6.@Results 可以与@Result 一起使用,封装多个结果集 7.@ResultMap: 实现引用@Results 定义的封装 8.@One 实现一对一结果集封装 9.@Many 实现一对多结果集封装 实现注解二级缓存的使用 11.@Results 代替的是标签 12.@Resutl 代替了 标签和 标签 13.@One (一对一):代替了 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象 14.@Many (多对一):代替了 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象 三、MyBaits-PlusSpring注解分为两类,一种是使用bean的(@Autowired , @Resource),一种是注册bean的(@Component , @Repository , @ Controller , @Service , @Configration) 1.@Bean注解@Bean 标识一个用于配置和初始化一个由SpringIoc容器管理的新对象的方法,类似于XML配置文件的 ,一般与@Configration注解配合使用 注册bean 2.@Service注解首先,在配置root-config.xml文件中加一行: 加上这一行以后,将自动扫描路径下面的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了 类似作用的还包括@Component、@Repository、@Controller: 3.@Component注解把普通pojo实例化到spring容器中,相当于配置文件中的 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类 4.@Repository注解用于标注数据访问组件,即DAO组件,再稍微大点的项目里,使用xml的bean定义来配置会大大增加代码体积且不易维护,所以引入了自动扫描的机制,它的作用和在xml文件中使用bean节点配置组件时一样的。 5.@Controller注解当组件属于控制层时,则使用@Controller注解 被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作 6.@Configration注解 @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器 需要注意的是: @Configuration不可以是final类型; @Configuration不可以是匿名类; 嵌套的configuration必须是静态类。 Bean注解主要用于方法上,有点类似于工厂方法,当使用了@Bean注解,我们可以连续使用多种定义bean时用到的注解,譬如用@Qualifier注解定义工厂方法的名称,用@Scope注解定义该bean的作用域范围,譬如是singleton还是prototype等。 使用bean 7.@Autowired 注解它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。 @Autowired注解可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(bean可用)如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合@Qualifier注解进行限定,指定注入的bean名称 8.@Resource注解@Resource和@Autowired注解都是用来实现依赖注入的。只是@Autowired按byType自动注入,而@Resource默认按 byName自动注入 @Resource依赖注入时查找bean的规则
9.@ComponentScan注解@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。 例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。 10.@PropertySouce注解通过@PropertySource注解将properties配置文件中的值存储到Spring的 Environment中,Environment接口提供方法去读取配置文件中的值,参数是properties文件中定义的key值。 11.@ImportResource注解和@Import注解@Import注解是引入带有@Configuration的java类。 @ImportResource是引入spring配置文件.xml 12.@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。 13.@responseBody注解@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据 14.@Value('abc')和@Value('${user}')@Value('abc')给基本类型注入 @Value('${user}')读取配置文件的key得到value给基本类型注入 SpringMVC1、@RequestMapping@RequestMapping 2、@RequestParam绑定单个请求参数值@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。 3、@PathVariable绑定URI模板变量值@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。 4、@ModelAttributeModelAttribute可以应用在方法参数上或方法上,他的作用主要是当注解在方法参数上时会将注解的参数对象添加到Model中;当注解在请求处理方法Action上时会将该方法变成一个非请求处理的方法,但其它Action被调用时会首先调用该方法。 5、@SessionAttributes在默认情况下,ModelMap中的属性作用域是request级别,也就是说,当本次请求结束后,ModelMap 中的属性将销毁。如果希望在多个请求中共享ModelMap中的属性,必须将其属性转存到session 中,这样 ModelMap 的属性才可以被跨请求访问。 6、@Responsebody与@RequestBody@Responsebody表示该方法的返回结果直接写入HTTP response body中。一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。 SpringBoot1、@Bean它是可以标注在一个方法上,并且方法返回的这个对象就会注册到Spring容器中 2、@Primary同样的这些组件,比如两个方法都返回了数据源DataSource,可以给某一个方法上面标注一个@Primary这样的话,就能够标识这是一个主要组件,那么就默认使用这个标注了@Primary这个方法的组件。 3、@DependsOn这个是声明组件之间的依赖关系的,比如A要创建,@DependsOn B跟C,那么就是创建A这个组件的时候,就会把B跟C先提前准备好 4、@Lazy组件的懒加载,也就是说在用的时候才进行创建,不用的话不创建。因为默认的组件,Spring容器一启动,容器中的所有组件都会进行创建。 5、@Scope声明组件的作用范围,常用的作用范围是:SCOPE_PROTOTYPE(原型),SCOPE_SINGLETON(单例) 单例就是获取到的东西跟他原本的是一模一样的,独一份的。 而原型就是有一个本体,但你获取的都是这个本体的克隆对象,就跟这个本体不是一个对象,但是内容是一样的。 如果学过原型设计模式和单例设计模式就知道这两者的用途。 6、@Configuration这个注解在SpringBoot大量使用到,这个注解用来标注一个类,就说明这个类是一个配置类来替换以前的Spring的Xml配置文件。 7、@Component这个用来编写Spring/WEB应用的时候,标注在一个类上,那么这个类就自动添加到容器中。 8、@Indexed这个是Spring5.0里面新加入的一个注解,它是一个加速注解,也就是说默认Spring容器一启动的时候,所有的组件才会进行加载创建对象,如果有大量的组件经常要用到,又不想等Spring容器启动的时候才加载并创建对象,那么就可以标注@Indexed 这个注解,这样的话就相当于给组件直接生成相关的class缓存并全部放好,那么以后Spring容器一旦启动就直接能用了,就不用再走整个Spring容器的启动流程了。 9、@Order这个是组件之间的顺序,设置的数字越小,优先级就会越高,一旦优先级越高就优先创建这个组件。 10、@ComponentScan这个大家估计都知道了,就是包扫描,可以批量扫描某一个包下的所有组件(该包和下面的子包)。 11、@Conditional这个在SpringBoot里面的核心注解,他是根据有没有满足相关条件,再来进行组件注入。 12、@Import这个是用于导入第三方的jar的,如果自己来写注解,那么这些自己写的注解只能标注在自己的类上,但是引入别人开发好的第三方包,并且这个第三方包这个源码在包里面已经压缩好了,所以就可以使用@Import 这个注解来把第三方的包里面的组件导入到容器中。 13、@ImportResource这个是用于导入以前的Xml配置文件。 14、@Profile这个是在SpringBoot里面的多环境激活。 15、@PropertySource这个是导入外部的properties配置文件 16、@PropertySources跟@PropertySource的组件注解 17、@Autowired都是组件的装配功能 18、@Qualifier都是组件的装配功能 19、@Value获取环境变量里面的值或者是获取配置文件中的值 @Value('#{xxx}') @Value('${xxx}') #:可以对象调用方法 $:代表的是一个取值 20、@Lookup这个注解只能标注在方法上,这个注解用于有时候这个单实例组件就想使用原型模式引用另外的原型的组件,使其能够获取不一样的对象。 这个注解标注在方法上以后,它会去容器中找相关组件。 更具体的解释就是: A是单实例组件,A要使用B这个原型组件,在A获取B还是获取的是单实例的,如果用了这个@Lookup注解,那么A获取B,就是获取的是原型的B。 注意:@Lookup若标注在get()的方法上,使用@Bean的这种方式注册的组件,那么@Lookup这个注解就不不生效。 Swagger注解API1、@ApiModelProperty作用范围:对象属性 使用位置:用在出入参数对象的字段上 2、@Api作用范围:协议集描述 使用位置:用于controller类上 3、@ApiOperation作用范围:协议描述 使用位置:用在controller的方法上 4、@ApiResponses作用范围:Response集 使用位置:用在controller的方法上 5、@ApiResponse作用范围:Response 使用位置:用在 @ApiResponses里边 6、@ApiImplicitParams作用范围:非对象参数集 使用位置:用在controller的方法上 7、@ApiImplicitParam作用范围:非对象参数描述 使用位置:用在@ApiImplicitParams的方法里边 8、@ApiModel作用范围:描述返回对象的意义 使用位置:用在返回对象类上 自定义注解 |
|
来自: ZhouAndrew > 《Java》