2016-11-05 80 views
0

在這裏閱讀相關的查詢,但沒有一個是有幫助的。@Aspectj爲基礎的AOP:建議沒有被調用

這是我的xml文件:

<?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 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()); 
} 


    } 

這是我的主要 「模塊」 具有 「displayModuleInfo」 的方法,我需要補充的建議:

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); 
} 

    } 

我無法確定爲什麼建議不起作用。這是O/P我得到

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 

我有這些添加了這些罐子AOP: enter image description here

請告訴我,我在這裏缺少明顯的東西嗎?

回答

1

您的切入點聲明似乎格式錯誤。我創建了一個示例應用程序,它似乎應該是:

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

} 

該聲明的任何方法,其中名稱由objects.Modules類中聲明displayModule開始匹配。 IIRC您的聲明將匹配任何方法,由名稱以位於Modules包中的displayModule開始的類聲明。

萬一你錯過了,reference has great examples on how to create pointcuts

+0

噢,我的壞..我怎麼會錯過它... objects.Modules ..我沒有使用包名..現在它的工作fn ..謝謝文件 –

+0

'objects.Modules'必須是完全限定的名稱的類。我基於你的例子中顯示的'package'。 – Apokralipsa