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

结论是:

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

看了一下这个: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  执行的是子类内的逻辑。

 

最新文章

  1. AngularJs之五
  2. HTML5+javascript实现图片加载进度动画效果
  3. C++编程开发学习的50条建议(转)
  4. leetcode:Reverse Bits
  5. (转载) jQuery 页面加载初始化的方法有3种
  6. linux网址
  7. Redis 上实现的分布式锁
  8. 用《VisualStudio命令提示》生成WSDL客户端文件
  9. 分布式缓存Hazelcast案例一
  10. Ubuntu16.04安装Redis并配置
  11. Nginx+Keepalived部署
  12. JAVA泛型中的类型擦除及为什么不支持泛型数组
  13. javaBean转为json
  14. Android无法访问本地服务器(localhost/127.0.0.1)的解决方案
  15. AngularJS 路由 resolve属性
  16. AJAX(Jquery)
  17. 一个web应用的诞生(3)--美化一下
  18. RESTful API &amp; Swagger入门
  19. Python开发【第五篇】迭代器、生成器、递归函数、二分法
  20. MySQL之mysql命令使用详解

热门文章

  1. 探秘C#中的yield关键字
  2. 平时常用的Visual Studio操作技巧,持续更新中&hellip;&hellip;
  3. JavaScript对于函数的调用及原理
  4. Java读取properties配置文件时,中文乱码解决方法
  5. Solution Explorer 和 Source Control Explorer 的 View History 异同
  6. google protocol buffer的原理和使用(二)
  7. crtmpserver实现防盗流和流推送验证 之二
  8. SQL基础(二):SQL命令
  9. operator++()和operator++(int)的区别
  10. 升级mojave后的小问题解决