gpt4 book ai didi

java - 如何将属性注入(inject) Aspect 日志记录类?

转载 作者:行者123 更新时间:2023-11-29 05:53:56 25 4
gpt4 key购买 nike

我无法将属性注入(inject) LoggingAspect类(class)。成像我有一个 AspectJ 类:

@Aspect
public class LoggingAspect {
private IBoc theBo;

/** getter and setter **/
}

这是中国银行:

public interface IBoc {
}

public class BocImpl implements IBoc {
}

和 BOC 的 Spring 配置:

<beans ...>
<aop:aspectj-autoproxy/>

<bean id="theBoc" class="org.huahsin.BocImpl"/>
</beans>

在 applicationContext.xml 文件中,我以这种方式配置 AspectJ:

<beans...>
<bean id="theLog" class="org.huahsin.LoggingAspect">
<property name="theBo" ref="theBoc"/>
</bean>
</beans>

我怎么能注入(inject)theBoLoggingAspect类(class)?


2012 年 10 月 17 日更新

我在这里找到了一些线索。如果我删除 <aop:aspectj-autoproxy> , 成员变量 theBo在类里面LoggingAspect不会为空。如果我有那个代码,theBo 将为空。

最佳答案

通常 Spring 负责创建和配置 bean。但是,AspectJ 切面是由 AspectJ 运行时创建的。您需要 Spring 来配置 AspectJ 创建的切面。对于单例方面的最常见情况,例如上面的 LoggingAspect 方面,AspectJ 定义了返回方面实例的 aspectOf() 方法。您可以告诉 Spring 使用 aspectOf() 方法作为获取方面实例的工厂方法。

例如:

  <beans>      
<bean name="loggingAspect"
class="org.huahsin.LoggingAspect"
factory-method="aspectOf">
<property name="theBo" ref="theBoc"/>
</bean>

<bean id="theBoc" class="org.huahsin.BocImpl"/>
</beans>

更新:

在你的类中定义工厂方法:

@Aspect
public class LoggingAspect {

private IBoc iBoc;

private static LoggingAspect instance = new LoggingAspect();

public static LoggingAspect aspectOf() {
return instance;
}

public void setiBoc(IBoc iBoc) {
this.iBoc = iBoc;
}
}

关于java - 如何将属性注入(inject) Aspect 日志记录类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com