2016-11-05 84 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