首先注意标题,说的是类内部的注解

结论是:

不能,但是子类却可以享有父类该注解带来的效果。

看了一下这个:http://elf8848.iteye.com/blog/1621392

自己也试了一下,发现子类如果覆盖父类的方法,确实不能继承被覆盖方法的注解。

但是试了一下spring的注解,即便该注解没有被继承到子类上,子类同样能享有这个注解带来的效果,这可能和spring的注解扫描和bean加载机制有关,有时间看看源码吧,这里先记一下。

以下是实验时写的代码:

父类:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.PostConstruct;
import java.util.UUID; @RestController
@ConditionalOnMissingBean(name = "extDemoController")
public class DemoController {
@PostConstruct
public void init(){
System.out.println("---------------DemoController init---------------");
}
@Autowired
protected OneBean oneBean;
@RequestMapping("/random")
public String random(){
return UUID.randomUUID().toString();
}
}

子类:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.UUID; @RestController
public class ExtDemoController extends DemoController { public void init(){
System.out.println("---------------ExtDemoController init---------------");
} public String random(){
System.out.println(oneBean.hello());
return "random from ExtDemoController";
} }

测试代码1:

package com.example.demo;

import org.springframework.web.bind.annotation.RequestMapping;

import java.lang.reflect.Method;

public class CustomTest {
public static void main(String[] args) throws NoSuchMethodException {
Class<ExtDemoController> clazz = ExtDemoController.class;
Method method = clazz.getMethod("random",new Class[]{});
if(method.isAnnotationPresent(RequestMapping.class)){
RequestMapping oneAnnotation = method.getAnnotation(RequestMapping.class);
System.out.println(oneAnnotation.name());
}
}
}

测试代码2:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean; @SpringBootApplication
//@EnableConfigurationProperties(FirstConfig.class)
public class DemoApplication { public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
for(String name:ctx.getBeanDefinitionNames()){
System.out.println(name);
}
}
}

测试说明:

这是一个普通的springboot项目,maven里只引入了

spring-boot-starter-web

项目可以用 http://start.spring.io/ 生成。

测试步骤:

执行测试代码1,发现注解不能被子类继承。

执行测试代码2,发现子类虽未继承父类内部的三种注解,但是却完全可以享有它们的功能。即访问  /random  执行的是子类内的逻辑。

 

SpringMVC 类内部的RequestMapping注解能否被继承?的更多相关文章

  1. SpringMVC源码解读 - RequestMapping注解实现解读 - RequestMappingInfo

    使用@RequestMapping注解时,配置的信息最后都设置到了RequestMappingInfo中. RequestMappingInfo封装了PatternsRequestCondition, ...

  2. SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系

    一般我们开发时,使用最多的还是@RequestMapping注解方式. @RequestMapping(value = "/", param = "role=guest& ...

  3. SpringMVC源码解读 - RequestMapping注解实现解读

    SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系  https://www.cnblogs.com/leftthen/p/520840 ...

  4. SpringMVC源码解读 - RequestMapping注解实现解读 - ConsumesRequestCondition

    consumes  指定处理请求的提交内容类型(media-Type),例如application/json, text/html. 所以这边的ConsumesRequestCondition就是通过 ...

  5. SpringMVC 和SpringBoot中的注解是如何起作用的,如何实现的

    SpringMVC源码解读 - HandlerMapping - RequestMappingHandlerMapping初始化   https://www.cnblogs.com/leftthen/ ...

  6. SpringMVC中@Controller和@RequestMapping用法和其他常用注解

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  7. SpringMVC 学习笔记(二) @RequestMapping、@PathVariable等注解

    版权声明:本文为博主原创文章,博客地址:http://blog.csdn.net/a67474506?viewmode=contents 1.1. @RequestMapping映射请求 Spring ...

  8. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  9. SpringMVC中@Controller和@RequestMapping用法和其他常用注解(转)

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

随机推荐

  1. 25LINQ拾遗及实例

      投影 □ 遍历数组索引,Select获取 int[] indexes = {0, 2}; string[] strs = {"a", "b", " ...

  2. MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转)

    本文转自https://m.imooc.com/article/details?article_id=17290 感谢作者 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理 ...

  3. java多台

    多 态★★★★★(面向对象特征之一):函数本身就具备多态性,某一种事物有不同的具体的体现. 体现:父类引用或者接口的引用指向了自己的子类对象.//Animal a = new Cat();父类可以调用 ...

  4. 最快的BT软件rtorrent Step by Step指南

    原文地址:http://forum.ubuntu.org.cn/viewtopic.php?t=165069 rtorrent是linux下最快的bt下载软件,由于支持DHT网络,可以很好的于迅雷和B ...

  5. 【转】利用HTML5开发Android

    ● Android设备多分辨率的问题 Android浏览器默认预览模式浏览 会缩小页面 WebView中则会以原始大小显示 Android浏览器和WebView默认为mdpi.hdpi相当于mdpi的 ...

  6. sscanf,sprintf用法

    #include<string.h> #include<stdio.h> int main() { ],sztime1[],sztime2[]; sscanf("12 ...

  7. maven选包算法(两个相同的包)

    引入了两个相同groupId和artifactId的jar,但是版本不同,选择层级最浅的包,层级可以通过依赖树来看

  8. Android 时间日期Widget 开发详解

    桌面Widget其实就是一个显示一些信息的工具(现在也有人开发了一些有实际操作功能的widget.例如相机widget,可以直接桌面拍照).不过总的来说,widget主要功能就是显示一些信息.我们今天 ...

  9. go语言之进阶篇方法面向过程和对象函数的区别

    1.方法 (method) 在面向对象编程中,一个对象其实也就是一个简单的值或者一个变量,在这个对象中会包含一些函数,这种带有接收者的函数,我们称为方法(method). 本质上,一个方法则是一个和特 ...

  10. Cisco KVM Console无法打开

    前阵子手贱, 每次弹出的Java的update的对话框我都是直接关闭的, 那天实在是不忍再受骚扰, 升级到了Java 8. 结果Cisco的KVM就死活打不开了, 报错如下: Exception: c ...