当前位置: 首页 > 面试题库 >

用于@Aspect方面的Spring自动装配bean为空

江佐
2023-03-14
问题内容

我有以下弹簧配置:

<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为null。不幸的是,我找不到明确的文档说明为什么这样做。(作为记录,我的simpleEmailSender
bean存在并且已正确连接到其他类中)以下几点使我感到困惑:

  1. 是否应该使用context:component-scan获取@Aspect?如果可以肯定的话,那将是一个弹簧管理的bean,那么自动装配应该可行吗?
  2. 如果context:component-scan不是用于创建方面,那么如何创建我的方面?我以为aop:aspectj-autoproxy只是创建一个beanPostProcessor来代理我的@Aspect类?如果不是Spring托管的bean,它将如何执行?

显然,您可以告诉我,我对一切应该如何工作一无所知。


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我有以下spring配置: 然后我有一个方面: 此方面有效(我可以在afterPoll上达到断点),但是simpleEmailSender为null。不幸的是,我找不到清楚的文档说明为什么这样做。(作为记录,我的simpleEmailSender bean存在并且已正确连接到其他类中)以下几点使我感到困惑: 是context:component-scan应该是@Aspect吗?如果可以

  • 本文向大家介绍Spring的自动装配Bean的三种方式,包括了Spring的自动装配Bean的三种方式的使用技巧和注意事项,需要的朋友参考一下 spring的自动装配功能的定义:无须在Spring配置文件中描述javaBean之间的依赖关系(如配置<property>、<constructor-arg>)。IOC容器会自动建立javabean之间的关联关系。 如果没有采用自动装配的话,手动装配我们

  • 本文向大家介绍spring 自动装配 bean 有哪些方式?相关面试题,主要包含被问及spring 自动装配 bean 有哪些方式?时的应答技巧和注意事项,需要的朋友参考一下 no:默认值,表示没有自动装配,应使用显式 bean 引用进行装配。 byName:它根据 bean 的名称注入对象依赖项。 byType:它根据类型注入对象依赖项。 构造函数:通过构造函数来注入依赖项,需要设置大量的参数。

  • 我使用的是Spring 3 AOP,我有一个方面需要访问HttpServletRequest。它看起来像这样: 配置如下: 是不是每个IoC容器只调用一次init方法,即使这是一个方面,httpServletRequest线程是否安全?如果不是,那么在建议执行期间获取它并使其成为线程安全的最佳方法是什么?如果可能的话,我宁愿不使用本地线程。

  • 问题内容: 是否可以在用Java编写的Spring配置中使用Spring的注释? 例如: 显然,不能直接实例化DataSource接口,但是为了简化起见,我在这里直接实例化了它。当前,当我尝试上述操作时,数据源对象仍然为null,并且Spring不会对其进行自动接线。 我通过返回一个Hibernate 对象成功地工作了。 所以我的问题特别是:是否有办法针对a ?或更笼统地说,在Spring Jav

  • Spring支持IOC,自动装配不用类实例化,直接从bean容器中取。 1、配置在xml中 <bean id="employeeDAO" class="com.guor.EmployeeDAOImpl" autowire="byName" /> 2、@Autowired自动装配