@Aspect 方面的 Spring 自动装配 bean 为 null

2024-04-30

我有以下弹簧配置:

<context:component-scan base-package="uk.co.mysite.googlecontactsync.aop"/>

<bean name="simpleEmailSender" class="uk.co.mysite.util.email.simple.SimpleEmailSenderImplementation"/>

<aop:aspectj-autoproxy/>

然后我有一个方面:

@Aspect
public class SyncLoggingAspect {
    @Autowired
    private SimpleEmailSender simpleEmailSender

    @AfterReturning(value="execution(* uk.co.mysite.datasync.polling.Poller+.doPoll())", returning="pusher")
    public void afterPoll(Pusher pusher) {      
        simpleEmailSender.send(new PusherEmail(pusher));
    }
}

这方面有效(我可以在 afterPoll 上命中断点),但 simpleEmailSender 为空。不幸的是,我找不到关于原因的明确文档。 (根据记录,我的 simpleEmailSender bean 存在并且正确连接到其他类)以下事情让我感到困惑:

  1. context:component-scan 应该拾取 @Aspect 吗?如果是的话,那么它肯定是一个 spring 管理的 bean,因此自动装配应该可以工作?
  2. 如果 context:component-scan 不是用于创建方面,那么我的方面是如何创建的?我认为 aop:aspectj-autoproxy 只是创建一个 beanPostProcessor 来代理我的 @Aspect 类?如果它不是 Spring 管理的 bean,它会如何做到这一点?

显然你可以看出我不明白事情应该如何从头开始运作。


该方面是一个单例对象,并且是在 Spring 容器外部创建的。使用 XML 配置的解决方案是使用 Spring 的工厂方法来检索切面。

<bean id="syncLoggingAspect" class="uk.co.demo.SyncLoggingAspect" 
     factory-method="aspectOf" />

使用此配置,方面将被视为任何其他 Spring bean,并且自动装配将正常工作。

您还必须对 Enum 对象和其他没有构造函数的对象或在 Spring 容器外部创建的对象使用工厂方法。

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

@Aspect 方面的 Spring 自动装配 bean 为 null 的相关文章

随机推荐

  • 使用线程反转字符串

    最近 在一次面试中 我被要求使用线程实现一个字符串反转功能 我想出了下面解决方案的大部分内容 被选中与否是另一回事 我尝试在运行 Windows 8 Consumer Preview 的家用电脑上运行以下解决方案 编译器是VC11 Beta
  • 智能指针的三法则?

    我对将 三法则 与智能指针一起使用感到有点困惑 如果我有一个类 其唯一的数据成员是智能指针 我是否需要显式定义析构函数 复制构造函数和赋值运算符 我的理解是 由于智能指针将自动处理资源 所以我不需要显式定义析构函数 因此我不需要根据三规则为
  • 使用 .NET Core 操作图像

    我已将我的项目从 NET 4 5 更新到 NET Core 使用 ASP NET Core 我在以前的版本中有一些非常简单的代码 使用了位图对象System Drawing调整图像大小 我认为System Drawing不能在 NET Co
  • 你现在在做MDA(模型驱动架构)吗?如果是这样,您使用什么工具,效果如何?

    模型驱动架构是这样一种想法 您创建模型 以一种不依赖任何 或至少大多数 实现技术的方式表达您需要解决的问题 然后为一个或多个特定平台生成实现 人们声称 在更高的抽象级别上工作更加强大和高效 此外 您的模型比技术更长寿 因此 当您的第一语言
  • 将 Grails 应用程序移植到 GAE

    我目前正在评估一个 Grails 应用程序是否移植到 Google App Engine 我想了解以下方面的经验 Acegi 安全性 应用程序依赖此库来增强安全性 更新 刚刚了解到它基于 hibernate 因此无法移植 有推荐的替代品吗
  • 通话过程中是否可以拦截语音数据?

    我计划开发 Android 应用程序 对语音数据进行加密 解密 以便各方可以使用安全通道进行通信 那么问题来了 GSM通话时如何拦截语音 音频数据 可能还是不可能 我应该使用 Android NDK 还是其他东西 在 GSM 中 由于信道特
  • 是否可以在执行时查看对对象的所有引用?

    有没有办法查看执行时对某个对象的所有引用 我正在使用 Netbeans 其中是否存在此功能 编辑 使用探查器来执行此操作没有问题 我只需要知道引用 无论如何 好的 Netbeans 显示了对一个对象的所有引用 首先 以调试模式运行项目CTR
  • 如何从js获取zk元素id

    我正在使用 ZK 我想从 js 获取 zk 元素的 id 我使用了不同的方式 像原生 html 一样声明组件 它从 js 获取 id 但它不正确 我已经使用 ZK 的 html 标签声明了该元素 但也不正确 我已经看到了一些像 Compon
  • 可以跳过“不返回”吗?

    我想知道跳过是否是一种不好的方式return None 当不需要时 Example def foo1 x if some condition return Baz x else return None def foo2 x if some
  • 适用于 Visual Studio 2013 的水晶报表 8

    有什么办法可以在 Visual Studio 2013 上运行 Crystal Reports 8 我有一个使用 VS2008 Crystal Reports 8 构建的 Vb Net 项目 现在我正在运行 Visual Studio 20
  • 使用 AFNetworking 发送多张图像

    我正在开发一款消息应用程序 用户还可以互相发送图片 当用户发送多张图片时 我会并行发送它们 在发送第二张图片之前 我不会等待第一张图片完成上传 搬到之前AFNetworking我成功地做到了这一点ASIFormDataRequest 事实上
  • 如何在 Angular 2 中添加表单验证模式?

    我有一个简单的表单 需要验证输入的开头和结尾是否不是空格 在 HTML5 中 我将这样做
  • 如何根据最短距离为经纬度观测值指定名称

    我有两个数据框 df1包含带有经纬度坐标的观测值 df2具有带有纬度坐标的名称 我想创建一个新变量df1 name每个观察值的名称df2到该观测值的距离最短 一些示例数据df1 df1 lt structure list lat c 52
  • 解析对象或对象数组的 JSON 键

    在 Moshi 中 是否可以创建一个类型适配器来解析同一类型的对象或对象列表 例如 有时 JSON 是 person 其他时候是 person 理想情况下 我希望有一个如下所示的 Java 对象 class PersonContainer
  • PyFile_Type 替换为 ..?

    我正在尝试编译Yenc https bitbucket org dual75 yenc对于Python 3 2 我注意到 gcc 抱怨未声明的函数PyString Type 所以我用它的替代品替换了它PyBytes Type正如根据文档 h
  • 如何使用 Visual Studio + ReSharper 禁用不需要的自动完成?

    我正在使用 Visual Studio 2010 和 ReSharper 5 我在 cs 文件的顶部定义了它 if X86 using size t System Int32 else using size t System Int64 e
  • 如何使用 java 开始编码和设置 Web 服务器?

    所以现在我想我已经学习了java的所有基础知识和术语 但我不知道如何使用 Java 中的 Netbeans 编码和显示网页 大多数教程包含大量关于不同技术的讨论 Java 使用 Java Beans JSP 和 servlet 等 我在哪里
  • Laravel 中的魔法方法

    所以我最近意识到 而不是使用 users User all return view home gt with users users 你有能力做到 return view home gt withUsers users 我相信这些被称为 神
  • 在 iOS 13 中推送 UIViewController 会导致其与状态栏重叠

    请注意 该项目是在 Xcode 10 中创建的 我最近升级到 Xcode 11 发生了这种情况 我有一个 UINavigationController 来推动视图控制器 初始视图控制器看起来不错 但是当我通过推动另一个视图控制器来连接它时
  • @Aspect 方面的 Spring 自动装配 bean 为 null

    我有以下弹簧配置