丢失代理类的类自定义注释

2024-01-10

我正在使用 Seam 使用 @In 注释将 bean 注入到我的控制器中。注入的类有一个自定义注释,当调用injectedClass.getClass().getAnnotation(annotationClass)时,它返回null。

调试时,我发现Seam传递了一个代理实例,因此getClass()返回InjectedClass_$$_javassist_seam_5,它没有我的自定义注释。

如何从代理类获取自定义注释?

这是我的课程的样子:

@CustomAnnotation(value="myvalue")
@Name("myAnnotatedClass")
public class MyAnnotatedClass extends SuperClass {...}

@Scope(ScopeType.SESSION)
@Name("myController")
public class MyController {
     @In("#{myAnnotatedClass}")
     private MyAnnotatedClass myAnnotatedClass;

     public void actionMethod(){
         //call another class which call myAnnotatedClass.getClass().getAnnotation(CustomAnnotation.class)
         //then do some reflection for MyAnnotatedClass fields 
     }
}

好问题。

当您使用 Seam 调用方法时,该方法会被代理拦截。这个可以启用@In 或@Out-jection。但这个规则有一个例外:当您调用内部方法时它不起作用

所以试试这个代码

@Name
public class Service {

    @In
    private MyAnnotatedClass myAnnotatedClass;


    public void myInterceptedMethod() {
        // internal method bypass interceptor
        // So @In or @Out-jection is not enabled
        internalMethod();
    }

    private void internalMethod() {
        System.out.println(myAnnotatedClass.getClass().getAnnotation(annotationClass));
    }

}

添加到原始答案

您想要从您的 bean 检索注释。但是,由于方法拦截器,myAnnotatedClass.getClass() 返回一个代理对象,而不是 bean 类本身。

对于每个 bean 类,Seam 创建一个组件定义,其中存储在应用程序上下文中。属性的名称遵循以下模式:元件名称 plus 。成分。所以如果你有一颗像这样的豆子

@Name("myBean")
public class MyBean {

}

其组件定义存储在属性中myBean.组件

所以在你的方法中,你可以使用

Component myBeanComponentDefinition = (Component) Context.getApplicationContext().get("myBean.component");

现在你可以打电话

myBeanComponentDefinition.getBeanClass().getAnnotation(CustomAnnotation.class);

regards,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

丢失代理类的类自定义注释 的相关文章

随机推荐

  • 在 R 中用十六进制值绘制颜色

    如何在 R 中生成 5x5 矩阵 每个单元格用调色板 例如 viridis 中的不同颜色着色 并且每个单元格显示颜色的十六进制值 谢谢您的帮助 您可以使用show col函数从scales package library viridis l
  • 如何在单击任何按钮时更改按钮的背景颜色?

    我有 3 个按钮 我创建了一个样式 用于所有三个按钮以显示 MouseOver 和 Pressed 状态 我需要有逻辑来指示选择 单击了哪个按钮 如果单击按钮 则背景颜色应保持 与按下状态相同 而其他两个按钮应重置为背景颜色以作为正常状态
  • 如何从 ASP.NET 读取条形码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不确定 这可能吗 我想从 ASP NET 网站扫描条形码 有人知道怎么做吗 您需要扫描仪以及与扫描仪交互的相关软件 大多数手持式扫描
  • 为什么 eb 部署在第一次部署时失败?

    我创建了 2 个 NodeJs 环境 效果很好 后来创建了一个新的环境并eb deploy env name给我以下错误 Creating application version archive app ceb7 200713 223016
  • Android:将compileSdkVersion设置为比最新api更低的版本有优势吗?

    将清单中的compileSdkVersion设置为小于最新的api版本号有什么好处 还是应该始终将其设置为最新的api版本 android compileSdkVersion 22 当我说优势时 我指的是应用程序的性能 应用程序的编译时间
  • 使用谷歌应用程序引擎部署 Bottle 应用程序时出现问题

    这里是新手 我一直在尝试使用谷歌应用程序引擎在瓶子中创建一个 Hello World 我显示了 hello world 部分 但即使在索引页面上 我也得到以下输出 Hello world 状态 500 如果我尝试添加新路由 例如 page
  • 关闭服务器后尝试运行服务器时,Django python已停止工作

    python manage py runserver 第一次工作正常 但是用 ctrl c 关闭它后 我无法再次启动它 我收到错误消息 Python 已停止工作 通过重新启动计算机可以轻松解决此问题 但非常不方便 我也使用 pycharm
  • 编译 Rust 静态库并在 C++ 中使用它:未定义的引用

    我正在尝试编译一个staticRust 中的库 然后在我的 C 代码中使用它 注意这是从 C 调用 Rust 而不是相反 我浏览了我可以在网上找到的所有教程 并回答了类似的问题 我显然做错了什么 尽管我看不出是什么 我为我的问题创建了一个最
  • 无法在 Ubuntu Oracle Java 8 上运行 IntelliJ IDEA CE 12

    我使用的是 Ubuntu 13 04 和 Oracle Java 8 我已经设置了JAVA HOME and PATH变量 以下是尝试运行 IntelliJ 的终端输出 darren ubuntu opt intellij idea ce
  • 如何在 Mac OS X 中检测 SSD?

    是否有一种可靠 快速 确定性的方法 即not基准 来检查 Mac OS X 所在的系统驱动器是否是固态驱动器 还有其他指标可以表明磁盘处理并行访问的能力如何吗 我正在尝试调整我的程序将用于磁盘绑定操作的线程数 我对原始速度或寻道时间不感兴趣
  • Android FileProvider 删除文件

    我正在使用照片库应用程序 由于最近的牛轧糖更新 我无法从图库中删除文件 我发现我必须使用Fileprovider对于文件访问 我尝试了下面的代码 但它说 04 25 12 52 03 031 3204 4133 com zo tns1 E
  • 改造解析JSON动态键

    我是改造的新手 如何使用retrofit解析下面的Json data Aatrox id 266 title a Espada Darkin name Aatrox key Aatrox Thresh id 412 title o Guar
  • MongoDB $graphLookup 尝试获取树结构

    我正在尝试使用新的 MongoDB v3 4 graphLookup 聚合管道 我有这个简单的树集合 其中包含一些节点和父 DBRef id ObjectId 59380657bbdbfb36c18a80f2 name Root node
  • 如何在 Web 视图中单击链接时禁用橙色圆圈效果

    我试图捕捉鼠标点击位置 所以我写了一个onClick in the body标签 但每次我点击页面时 整个页面都会变成橙色一段时间 有什么设置可以禁用这个效果吗 根据this http groups google com group pho
  • 1000以上怎么取?

    如何从数据存储中获取超过 1000 条记录并将所有记录放入一个列表中以传递给 django 从版本 1 3 6 2010 年 8 月 17 日发布 开始 您CAN 从变更日志 http code google com p googleapp
  • 为什么我无法保存我的地址?

    我正在尝试使用 Django 开发一个电子商务网站 我想使用 ajax 来处理我的结账表单 当我添加 Ajax 时 填写表单并单击提交按钮后 我发现我的表单和数据没有通过进入我的管理员来保存 它也没有被重定向到return HttpResp
  • C# 中的不透明字典键模式

    我遇到过很多情况 其中访问键控集合 如字典 中的项目的模式因键的类型不是简单类型 字符串 整数 双精度等 而受到阻碍 并且不是您想要提升为实际命名类的东西 C 3 0 引入了编译器自动生成的匿名类型的概念 不像struct的 这些动态生成的
  • 使用正则表达式从字符串中提取数字

    我找到了这个 C 代码 然后根据我的需要进行了改进 但现在我想让它适用于所有数字数据类型 public static int intRemover string input string inputArray Regex Split inp
  • 删除 R 中 ggplot2 中的单个 x 轴刻度线?

    我正在 ggplot2 中制作条形图 出于演示原因 我需要在一些条形之间留有空格 我正在使用限制scale x discrete插入空条 这给了我需要的间距 群体之间的差距b and c在我的模拟数据中看起来很完美 但是之间的差距a and
  • 丢失代理类的类自定义注释

    我正在使用 Seam 使用 In 注释将 bean 注入到我的控制器中 注入的类有一个自定义注释 当调用injectedClass getClass getAnnotation annotationClass 时 它返回null 调试时 我