私はaspectJ式内にあります:
@Pointcut("within(com.param.cpms.dao.impl.ProjectMetaDaoImpl)")
public void daoExceptionHandle() {
}
Spring 3.0の起動時に、次のエラーが発生します:
nested exception is Java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
おそらく問題はあなたのポイントカットではなく、そのポイントカットを使用し、ポイントカットに存在しないパラメーターを使用するアドバイスにあります。アドバイスからパラメータを削除するだけです(まあ、またはポイントカットに追加します)。
投稿はかなり古いですが、@ Aroundアドバイスを使用する場合は、完全を期すために、別の理由を追加します。
Spring AspectJドキュメント によると、アドバイスの最初の引数はProceedingJoinPointでなければなりません。それがない場合は、まさにこの例外メッセージが表示されます。悲しいことに、この例外は誤ったアドバイスを指すものではないため、バグの解決は一見間違いです。
ジョインポイント( "p小文字)
org.aopalliance.intercept.Joinpoint;
JointPoint( "P大文字)に変更します
org.aspectj.lang.JoinPoint;
クラスのインポートが間違っているため、このエラーが発生しました。 import org.aspectj.lang.JoinPoint classをインポートする必要がありましたが、代わりに別のパッケージから他のJoinpointクラスをインポートしました。
同じエラーが発生しましたが、私のシナリオでは2つのメソッドパラメータを使用していました
public void methodName(JoinPoint joinPoint ,HttpServletRequest request) throws
そして私の注釈は
@Before("execution(public * com.Java.controller.*Controller.*(..))")
私が追加したソリューションとして
args(リクエスト、..)
@Before("execution(public * com.Java.controller.*Controller.*(..)) && args(request,..)")
私にもこの問題があり、私の場合はorg.aopalliance.intercept.Joinpoint;
からのインポートが間違っていました
次のようにする必要があります:org.aspectj.lang.JoinPoint;
時々理由はこれである可能性があります。
public void afterReturning(JoinPoint joinPoint, Object result)
削除するだけObject result
以下のように、それは私のために動作します。
public void afterReturning(JoinPoint joinPoint)
XMLベースの構成を使用していて、構成が次のようなものである場合:
<aop:config>
<aop:aspect ref="bAdvice">
<aop:pointcut id="displayPointcut" expression="execution(* com.example.demo.BusinessClass.display())"/>
<aop:before method="before" pointcut-ref="displayPointcut" />
</aop:aspect>
</aop:config>
次に、2つのシナリオで、エラーが発生します。
最終的に、XMLで定義されたメソッドパラメータが実際のメソッドと一致しない場合、このエラーが発生します。
これはあなたの答えではありませんが、少し役立つかもしれません。
Spring AOPチュートリアル このチュートリアルを参照できます
@Before("execution(* com.de.controller..*(..))")
public void beforeLoggerAdvice(JoinPoint joinPoint, WebRequest request) {
DeUtil.looger.info("--working");
}
同じ例外が発生しましたが、WebRequestのため、それを削除して代替を使用しました
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
ポイントカットの正式な非バインド例外は、AOPの2つの応答でも発生します。
理由1:にreturnステートメントがない場合アドバイスを返した後
XMLベースの実装の場合
<aop:aspect id="myaspect" ref="trackAspect">
<aop:pointcut id="pointCutAfterReturning" expression="execution(* com.springlearn.Operation.*(..))" />
<aop:after-returning method="myAdvice" returning="result" pointcut-ref="pointCutAfterReturning"/> //Make sure returning result is added
</aop:aspect>
注釈ベースの実装の場合
@AfterReturning(
pointcut = "execution(* Operation.*(..))",
returning= "result") //Make sure returning result is added
理由2:投球がない場合投球後のアドバイス
XMLベースの実装の場合
<aop:aspect id="myaspect" ref="trackAspect" >
<!-- @AfterThrowing -->
<aop:pointcut id="pointCutAfterThrowing" expression="execution(* com.javatpoint.Operation.*(..))" />
<aop:after-throwing method="myadvice" throwing="error" pointcut-ref="pointCutAfterThrowing" /> //Make sure throwing error is added
</aop:aspect>
注釈ベースの実装の場合
@AfterThrowing(
pointcut = "execution(* Operation.*(..))",
throwing= "error") //Make sure throwing error is added