上一篇博客以Override注解简单的解释了一下注解的概念和用处,也稍微引申了一点元注解的概念。 打在注解定义头上的注解为元注解,也就是“注解的注解”。元注解用于给注解打上标记,让对应的程序知道该怎么处理这个注解本身。 ,所以元注解也可以被元注解标记。 元注解的元注解叫什么?注解的注解的注解?元元注解?好吧,其实没那么无聊。元注解和普通注解并没有什么本质上的区别,只是打标记的目标不同而已。 Document我们在前文的很多元注解的定义中可以看到这个元注解,简而言之就是用这个元注解标记的注解会在生成的java doc中出现,这里就不举例了,只给出该元注解的定义。
SpringMVC 使用@RequestMapping注解为控制器指定可以处理哪些URL请求,在控制器的类定义及方法定义处都可标注: 类定义处:提供初步的请求映射信息。 return "success"; } @RequestMapping(value = "/helloworld05",params = {"param1=value1","param2" param1=value1¶m2=2222">test {"param1 = value1","param2"} Ant 风格资源地址支持3种匹配符: @RequestMapping @PathVariable注解 映射URL绑定的占位符 URL中的{xxx}占位符可以通过@PathVariable("xxx")绑定到操作方法的入参中 @Controller @RequestMapping 配置HiddenHttpMethodFilter * 2。
当注解的配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以省略 ApplicationContext ac = new AnnotationConfigApplicationContext 和该注解中的 value 属性作用一样。 @Bean 该注解只能写在方法上,用于把当前方法的返回值放入spring的IOC容器中。 如果注解的方法有参数的时,spring框架回去容器中查找有没有可以匹配的bean对象,与Autowired注解的作用是一样的 属性:name 指定当前bean的id,默认值是当前方法的名称。 "dataSource"> </constructor-arg> </bean> <bean id="dataSource" class="com.mchange.v<em>2</em>. 当我们使用Import的<em>注解</em>之后,有Import<em>注解</em>的类就是父配置类,而导入的都是子配置类 @Import(xxxx.class)
bean注解 spring提供了多个注解声明bean为Spring管理的Bean @Controller 声明此类事一个MVC类,通常与@RequestMapping一起使用 @Service 声明此类是一个业务处理类 2修饰的方法没有返回值 SessionAttributes 多次执行控制器方法间的参数共享 属性1. value:指定存入属性的名称
前面的一次简单的讲了关于注解的的基础部分,这一次分析xutils注解封装的源码(奉上github源码)。 *(只保留几个类)) (1) 注解模块目录结构 ? ? (2) 分析源代码 1.元注解--annoation文件夹下三个注解 ContentView:对于activity设置布局文件 /* * Copyright (c) 2013. wyouflf * 被注解的方法必须具备一下形式: * 1. private 修饰 * 2. 返回值类型没有要求 * 3. 方法名以Click或Event结尾, 否则可能被混淆编译时删除. View文件夹下4个类 ViewInfo--1.控件注解生成ViewInfo; 2.对于散列集合包括HashSet、HashMap以及HashTable通过先比较hashcode相等再比较
前面的一次简单的讲了关于注解的的基础部分,这一次分析xutils注解封装的源码(奉上github源码)。 *(只保留几个类)) (1) 注解模块目录结构 ? ? (2) 分析源代码 1.元注解--annoation文件夹下三个注解 ContentView:对于activity设置布局文件 /* * Copyright (c) 2013. wyouflf * 被注解的方法必须具备一下形式: * 1. private 修饰 * 2. 返回值类型没有要求 * 3. 方法名以Click或Event结尾, 否则可能被混淆编译时删除. View文件夹下4个类 ViewInfo--1.控件注解生成ViewInfo; 2.对于散列集合包括HashSet、HashMap以及HashTable通过先比较hashcode相等再比较
RequestMapping的作用
@RequestMapping 注解是 Spring MVC 框架中的一个控制器映射注解,用于将请求映射到相应的处理方法上。 2. RequestMapping的出现位置
通过RequestMapping的源码可以看到RequestMapping注解只能出现在类上或者方法上。
3. ">testValue2
</body>
</html>
启动服务器,测试,点击以下的两个超链接,发送请求,都可以正常访问到同一个控制器上的同一个方法:
4.2. name1=value1&name2=value2&name3=value3
其实除了这种方式,还有另外一种格式的请求路径,格式为:uri/value1/value2/value3,我们将这样的请求路径叫做 衍生Mapping
对于以上的程序来说,SpringMVC提供了另一个注解,使用这个注解更加的方便,它就是:PostMapping,使用该注解时,不需要指定method属性,因为它默认采用的就是POST
2 SpringBoot中的AOP处理 2.1 AOP 环境 使用 AOP,首先需要引入 AOP 的依赖。 ,只要在类上加个 @Aspect 注解即可。 @Aspect 注解用来描述一个切面类,定义切面类的时候需要打上这个注解。@Component 注解将该类交给 Spring 来管理。 2.3 常用注解 上面的案例中,用到了诸多注解,下面针对这些注解进行详解。 自定义注解类不变。
@SpringBootApplication 开启组件扫描和自动配置 其中该注解包括了 ? @SpringBootConfiguration:使用了@Configuration注解,声明基于Spring的java配置 @EnableAutoConfiguration:启用Spring应用程序上下文的自动配置 @ComponentScan:启用组件扫描,这样写的web控制器类和其他组件才能被发现并注册到容器中,比如@Controller,使用该注解的时候才能被扫描到 在Spring boot项目中,可以Application 相关类中加入@SpringBootApplication注解,然后直接使用main()就可以启动项目Application 作为了配置和引导类。 libs/demo-0.0.1-SNAPSHOT.jar) @Configuration 如果在Spring boot的自动配置外想使用其他的Spring 配置,可以直接写在@Configuration注解的类中
建设实体类属性和数据库的对应关系 以user表和acccount表为例 一、一对一的注解开发 @Results 注解 代替的是标签<resultMap> 该注解中可以使用单个@Result 注解,也可以使用 many 需要使用的@Many 注解(@Result(many=@many)())) @One 注解(一对一) 代替了<assocation>标签,是多表查询的关键,在注解中用来指定子查询返回单一对象 @Many 注解(多对一) 代替了<Collection>标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。 注意:聚集元素用来处理“一对多”的关系。 private Double money; //多对一(mybatis中多对一视为为一对一)的映射:一个账户只能属于一个用户 包含一个user类型的引用 private User user; 2. } public void setAccounts(List<Account> accounts) { this.accounts = accounts; } 2.
# SpringBoot2 常用注解 @SpringBootApplication @EnableAutoConfiguration @ImportResource @Value @ConfigurationProperties (prefix="person") @EnableConfigurationProperties @RestController @RequestMapping("/api2/copper") @RequestParam ("/api2/copper") 用来映射web请求(访问路径和参数)、处理类和方法,可以注解在类或方法上。 注解在方法上的路径会继承注解在类上的路径。 比如Ajax接口,可以用此注解返回数据而不是页面。此注解可以放置在返回值前或方法前。 另一个玩法,可以不用@ResponseBody。
swagger2 注解整体说明 @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置 notes="方法的备注说明" @ApiImplicitParams:用在请求的方法上,表示一组参数说明 @ApiImplicitParam:用在@ApiImplicitParams注解中 表示一个返回响应数据的信息 (这种一般用在post创建的时候,使用@RequestBody这样的场景, 请求参数无法使用@ApiImplicitParam注解进行描述的时候 :用在请求的类上,说明该类的作用 tags="说明该类的作用" value="该参数没什么意义,所以不需要配置" 例子: @Api(tags="APP用户注册Controller") 2、 :用在请求的方法上,包含一组参数说明 @ApiImplicitParams:用在请求的方法上,包含一组参数说明 @ApiImplicitParam:用在 @ApiImplicitParams 注解中
日志相关注解 lombok提供了一组日志相关注解,标注的类会隐式的定一个了一个名为log的日志对象。 Synchronized 同步方法注解。添加了该注解的方法,其方法体都会自动包含在一个synchronize块中。 ."); } @Synchronized("queue") public void sync2() throws Exception { System.out.println("sync2. 那么本例中,sync1和sync2是互斥的,sync1没有执行完之前,sync2会被挂起,等待sync1执行完成之后才可以执行。 ."); } } 注:因为sync3与sync1使用的不是同一个锁,那么他们没有互斥关系,sync2也一样。 一定要理清楚锁的关系,否则不要轻易使用该注解。
4、通过使用自定义的限定符注解,例如我用使用@Cold来标注组件类和自动装配两处。那么@Cold怎么自定义呢?我们需要自定义下该注解。 this.cd = cd; } public void say(){ cd.play(); } } 注意:如果构造函数有两个入参,分别是 bean1 和 bean2, 2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired BaseDao baseDao; 3、@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定, 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找 @Resource(name="baseDao") private BaseDao baseDao; 用 @Resource注解在字段上,且这个注解是属于J2EE的,减少了与spring
那么我现在的想法是,在注解的第一层aop中解析spel,然后将解析后的值设置到属性中,那么在之后的aop中就不用解析了。 找出注解中值存放位置 继续上一节的代码,在上一节的AOP中添加注解@Order(0),再新增一个注解,添加@Order(1)。注意order这个注解有坑的,最好先百度完再使用。 A { @Override public String func1() { //do something ... } public String func2( 继续往变量h里看,它有一个字段memberValues,是一个map,而在这个map中,我发现了注解值存放的位置。key为注解的属性名,value就是属性值。 修改注解值 找到了注解值存放位置,那么修改就简单了 @Component @Aspect @Order(0) public class InterestResolveELAspect { @
在上一篇文章中,我们讲解了:Java中注解的定义、JDK中内置注解、第三方注解。 本文是注解系列教程中的第二篇。来看看今天主要内容: ? 1:注解的分类 2:元注解说明 3:自定义注解声明 一:注解的分类 ? 注解根据运行机制、来源、功能来分: 1.1:按照运行机制来分,即时注解存在于程序的哪个阶段 ? 源码注解(source):在源码中存在的。 如:lombak的@data注解: ? 编译注解(class):编译期。既是在源码和class中都有的。 1.2:按照来源来区分,既是注解从哪里来的 按照来源来区分分为:JDK自带的注解、第三方注解、自定义注解 如下图: ? 1.3:按照功能来区分: 按照功能来区分,可以分为:元注解和非元注解。 二:元注解说明 2.1:什么是元注解? 元注解是指注解的注解。JAVA中元注解主要包括以下四个: ? 2.2:@Target target注解的作用:标注注解的作用域。
;
项目使用的EasyExcel通过打注解的方式,导出自动保留2位小数。 综上,为了保证最高的兼容性和耦合性,直接采用注解导出的时候格式化。
EasyExcel介绍
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 @ExcelProperty(value = "数学", order = 2)
@ContentStyle(dataFormat = 2)
private Double sx;
@ContentStyle 注解对应的dataFormat=2 ,这个注解的dataFormat就是设置格式的,他的值是BuiltinFormats类中_formats数组中对应格式的下标,源码如下:
package org.apache.poi.ss.usermodel _);_(@_)"
* 0x2d, "mm:ss"
* 0x2e, "[h]:mm:ss"
* 0x2f, "mm:ss.0"
注意 下面的例子仅仅显示了成员属性,注解同样也可以用在成员方法(getter/setter)上 ①属性重命名时使用的注解 最常见的使用方式之一就是改变某个成员属性所使用的JSON名称,例如: public first_name; } 将会生成如下所示的JSON数据结果: { "firstName" : "Bob" } 而不是: { "_first_name" : "Bob"} ②忽略属性时使用的注解 BasicType.class) // 或者我们可以这样: @JsonSerialize(typing=Typing.STATIC) public BasicType another; } 2 class BaseClass { } public class Impl1 extends BaseClass { public int x; } public class Impl2 public List<BaseClass> items; } 这样,序列化之后的JSON格式如下: { “items” : [ { “class”:”Impl2”
Web模块的基本注解 1.1、注解: @ResponseBody @RestController @PathVariable @RequestHeader @RequestParam @CookieValue WebMvcConfigurer 自定义配置,覆盖默认配置 对应配置类实现WebMvcConfigurer接口完成对springmvc默认配置的修改 直接将对应组件注入容器中 注意事项1: 注意事项2: json数据格式的,就在哪个类上使用该注解,具有统一性;需要注意的是,使用了@RestController注解之后,其本质相当于在该类的所有方法上都统一使用了@ResponseBody注解,所以该类下的所有方法都会返回 所以可以实现这个接口,配合@Configuration注解自定义mvc组件。 矩阵变量遇到相同的名字进行获取时,需要通过路径变量来进行区分,即占位符 @RestController public class myController { // /boss/1;age=20/2;
springboot1.x和springboot2.x整合差距挺大的,基于最新的2.x进行整合,使用纯注解的方式 依赖选取 首先pom文件的依赖引入,maven仓库有Apache和alibaba两个 ? 多个提供者使用的port需要区分开来 dubbo.protocol.scan 是表示扫描哪些包下面的服务 version是自定的一个版本属性 发布的服务通过@Service注解 ,加载被扫描的实现类上面,这里使用的是dubbo的注解 ? 启动类上面添加@EnableDubbo注解 ?