1

プロパティをLoggingAspectクラスに挿入するのに問題があります。私はAspectJクラスを持っています:

@Aspect
public class LoggingAspect {
   private IBoc theBo;

   /** getter and setter **/
}

これはBOCです:

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>

クラスtheBoでどのように注射できますか?LoggingAspect


2012 年 10 月 17 日の更新

ここで手がかりを見つけました。を削除すると、クラス<aop:aspectj-autoproxy>のメンバー変数はnull になりません。そのコードがあれば、theBo は null になります。theBoLoggingAspect

4

1 に答える 1

3

通常Spring、Bean の作成と構成の両方を担当します。AspectJただし、アスペクトはAspectJランタイムによって作成されます。Spring作成したアスペクトを構成する必要がありますAspectJLoggingAspect上記のアスペクトなどのシングルトン アスペクトの最も一般的なケースでは、アスペクト インスタンスを返すメソッドをAspectJ定義します。アスペクト インスタンスを取得するためのファクトリ メソッドとしてメソッドを使用するようにaspectOf()指示できます。SpringaspectOf()

例:

  <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;
    }
}
于 2012-10-15T09:40:27.793 に答える