2016-11-05 3 views
0

ここで関連する質問を読むが、どれも役に立たなかった。@AspectjベースのAOP:アドバイスが呼び出されない

これは私のxmlファイルである:これは私がアドバイスを追加する必要がある "displayModuleInfo" メソッドを持つ私のメインの "モジュール" は

package Aspects; 

@Aspect 
public class Advice { 


@Pointcut("execution(public void Modules.displayModule*.*(..))") 
public void pointCut1()//point cut name 
{ 

} 

@Before("pointCut1()") 
public void inputLogger(JoinPoint jp) 
{ 
    System.out.println(" inside advice"); 
    System.out.println("We are gonna start service signature   :"+jp.getSignature()); 
    System.out.println("Target name: "+jp.getTarget()); 
} 


    } 

::これは私のアスペクトである

<?xml version="1.0" encoding="UTF-8"?> 


<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "> 

<aop:aspectj-autoproxy/> 
<bean id="advice1" class="Aspects.Advice"></bean> 

<bean id="module1" class="objects.Modules"> 
<constructor-arg index="0"> <ref bean="resource1"/> </constructor-arg> 
<constructor-arg index="1" value="10 Oct"></constructor-arg> 
<constructor-arg index="2" value="11 Oct"></constructor-arg> 

<property name="moduleName" value="SaleLayaway"></property> 
</bean> 
<bean id="resource1" class="objects.Resource"> 
<property name="name" value="Smruti"></property> 
<property name="designation" value="PA"></property> 
<property name="teamName" value="BackEnd"></property> 
</bean> 
</beans> 

package objects; 

public class Modules { 


private Resource rescource; 
private String startDate; 
private String finsihDate; 
private String moduleName; 


public String getModuleName() { 
    return moduleName; 
} 

public void setModuleName(String moduleName) { 
    this.moduleName = moduleName; 
} 

public Modules(Resource rescource, String startDate, String finsihDate) { 
    super(); 
    this.rescource = rescource; 
    this.startDate = startDate; 
    this.finsihDate = finsihDate; 

} 
public Modules(){ 

} 
/*@Autowired 
public Modules(Resource rescource) { 
    super(); 
    this.rescource = rescource; 
}*/ 

public void displayModuleInfo(){ 
    System.out.println(" module name: "+moduleName); 
    System.out.println(" Resource name : "+rescource.getName()+":Designation :"+rescource.getDesignation()+" : team name :"+rescource.getTeamName()); 
    System.out.println(" module start date :"+startDate+" : finish date : "+finsihDate); 
} 

    } 

アドバイスが機能しない理由を特定できません。 enter image description here

私がここで行方不明ですいただきまし明白なことを:これは私が、これらはAOPのためにこれらのjarファイルを追加している私は

log4j:WARN No appenders could be found for logger   (org.springframework.context.support.ClassPathXmlApplicationContext). 
log4j:WARN Please initialize the log4j system properly. 
    module name: SaleLayaway 
    Resource name : Smruti:Designation :PA : team name :BackEnd 
    module start date :10 Oct : finish date : 11 Oct 

を取得していますO/Pのですか?

答えて

1

あなたのポイントカットの宣言が不正なようです。私は、サンプルアプリケーションを作成し、あるべきようだ:

@Pointcut("execution(public void objects.Modules.displayModule*(..))") 
public void pointCut1()//point cut name 
{ 

} 

この宣言は、名前はobjects.Modulesクラスが宣言displayModuleで始まる任意の方法を、一致しました。 IIRCの宣言は、パッケージにあるdisplayModuleで始まるクラスで宣言されたメソッドと一致します。

お見逃しの場合はreference has great examples on how to create pointcutsです。

+0

ああ私はそれを見逃すことができます...オブジェクト。モジュール。私はパッケージ名を使用していませんでした。その動作しているfn今..ありがとうMan –

+0

'objects.Modules'は完全修飾名クラスのあなたの例に示されている 'package'に基づいています。 – Apokralipsa

関連する問題