2019独角兽企业重金招聘Python工程师标准>>>

我就我遇到的自定义注解无法注入的问题整理一下:

1、遇到的问题

SpringMvc的注入式通过id去查找上下文,这种方式用起来非常好用,但是在使用自定义标签时遇到了问题,注入永远为空。这是为什么呢?

这是因为spring 注解注入@Autowired 前提是这个类被实例化,你自定义的标签只有在调用的时候 才会实例化的。

2、解决办法

1、 如果使用 Spring 的 MVC 包,则可以使用 RequestContextAwareTag 类。例:

public class AuthTag extends RequestContextAwareTag {private IAuthService authService;private String auth;public String getAuth() {return auth;}public void setAuth(String auth) {this.auth = auth;}@Overrideprotected int doStartTagInternal() throws Exception {boolean result = false;String erp = LoginContext.getLoginContext().getPin();authService = (IAuthService) this.getRequestContext().getWebApplicationContext().getBean("authService");List<SysAuth> list = authService.getByErp(erp);for(SysAuth a:list){if(auth.equals(a.getToken())){result = true;}}return result? EVAL_BODY_INCLUDE : SKIP_BODY;}
} 

2、没有使用Spring的Mvc包则建议使用以下方法:

/* 获取Spring上下文(以下代码可利用工具类进行包装) */
PageContext pageContext = (PageContext) this.getJspContext();
ServletContext servletContext = pageContext.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);/* 从上下文中获取指定的Bean */
IAuthService authService = (IAuthService) wac.getBean("authService");
/**
* 在Spring上下文中根据对象ID获取对象引用
*
* @param jspContext JSP上下文
* @param beanId 对象ID
* @return 对象引用
*/
@SuppressWarnings({"unchecked"})
public <T> T getBean(JspContext jspContext, String beanId)
{
T bean = null;
PageContext pageContext = (PageContext) jspContext;
if (pageContext != null)
{
ServletContext servletContext = pageContext.getServletContext();
if (servletContext != null)
{
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
if (wac != null && wac.containsBean(beanId))
{
bean = (T) wac.getBean(beanId);
}
}
}
return bean;
}

3、结果

我使用了第一种方式,注入的问题完美解决,注意继承类不同时需要实现的方法也不一样。

转载于:https://my.oschina.net/githubhty/blog/1031080

自定义注解的spring注入问题相关推荐

  1. 如何利用自定义注解放行 Spring Security 项目的接口

    在实际项目中使用到了springsecurity作为安全框架,我们会遇到需要放行一些接口,使其能匿名访问的业务需求.但是每当需要当需要放行时,都需要在security的配置类中进行修改,感觉非常的不优 ...

  2. 【IOC 控制反转】Android 事件依赖注入 ( 事件三要素 | 修饰注解的注解 | 事件依赖注入步骤 )

    文章目录 总结 一.Android 事件设置三要素 二.修饰注解的注解 三.Android 事件依赖注入步骤 总结 Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , ...

  3. java 自定义注解+AOP实现日志记录

    ssm版本: 1.首先自定义一个注解,该注解有两个属性,一个是模块名,一个是操作的内容.该注解是用来修饰Service层中的方法的. 2.创建一个切面类,该切面使用@Aspect和@Component ...

  4. 自定义注解+拦截器优化项目代码

    自定义注解+拦截器的优势 类似用户权限或者接口限流的需求,但并不是所有操作或者接口需要.可以使用过滤器或者拦截器,但这样就必须在配置文件里加上所有方法或者使用通配符. 所以可以采用一种比较简单灵活的方 ...

  5. java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用

    Spring 与自定义注解.外部配置化的结合使用 一.Java注解的简单介绍 注解,也叫Annotation.标注,是 Java 5 带来的新特性. 可使用范围 类.字段.方法.参数.构造函数.包等, ...

  6. Spring Boot2.x-09 基于Spring Boot 2.1.2 + Mybatis使用自定义注解实现数据库切换

    文章目录 概述 场景说明:读写分离 操作步骤 工程结构 Step1 自定义注解 Step2 数据源定义 Step3 配置文件配置数据源 Step4 数据源实例化DatasourceConfig Ste ...

  7. Spring自定义注解简单使用四步走

    在实际开发中,很多时刻我们会有记录请求日志,定时任务日志等需求,在每个方法中都编写相同的代码去记录日志显然是不合理的. Spring已经为我们提供了面向切面编程的思想,不妨简单的使用下自定义注解. 简 ...

  8. 深入Spring:自定义注解加载和使用

    转自:https://blog.csdn.net/z69183787/article/details/53784845 前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方 ...

  9. spring使用自定义注解_用Spring组成自定义注释

    spring使用自定义注解 Java批注在2004年随Java 5一起引入,是一种将元数据添加到Java源代码中的方法. 如今,许多主要框架(如Spring或Hibernate)都严重依赖注释. 在本 ...

最新文章

  1. Kafka设计解析(二):Kafka High Availability (上)-转
  2. JavaSE(十一)——多线程
  3. 超级抖音腾讯视频V3.6.0小程序源码 前端+后端 支持视频采集和上传
  4. 如何安装tensorflow
  5. python装饰器之函数作用域
  6. Error: Your project contains C++ files but it is not using a supported native build system
  7. python爬虫预测_从爬虫到机器学习预测,我是如何一步一步做到的?
  8. LaTeX(Overleaf)写作笔记
  9. 计算机应用技术中的c语言,C语言程序设计——Visual C++6.0(高等院校计算机应用技术系列教材)...
  10. linux lamp php5.4一键安装包,LAMP一键安装包(linux+apache+mysql+php)
  11. pandas 保存Excel 解决科学计数法问题
  12. 微信小程序注册教程-详细图文教程
  13. cpu倍频怎么调_认识外频和倍频,可以极限超频,把你CPU性能发挥到最大化
  14. RecyclerView在GridLayoutManager情况下实现四周都有分割线的ItemDecoration
  15. Ajax与Json的使用
  16. BadBoy乱码处理
  17. 学习淘淘商城第十六课(展示后台管理页面)
  18. linux升级内核后vnc显示没有桌面,Intel NUC(NUC6i3SYH)在不接显示器的情况下VNC不显示桌面(Ubuntu 18.04)...
  19. 广州Java工程师平均薪资_【广州恒生电子工资】java开发工程师待遇-看准网
  20. 西南交通大学计算机考研调剂的多吗,2020年西南交通大学考研调剂公告

热门文章

  1. druid-StatViewServlet配置
  2. jquery 滚动条插件
  3. 【热点报道】2013eoe移动开发者大会圆满落幕
  4. MOSS 2010 实现域账户 组员在线交流 Live Chat
  5. 您属于哪个版本的程序员[转]
  6. hdu 3022 Sum of Digits
  7. Code First 迁移
  8. D3 Data Visualization in Ext JS
  9. PHP递归创建多级目录(一道面试题的解题过程)
  10. [WPF系列]-Deep Zoom