@Aspectj基于AOP:建议没有被调用

时间:2016-11-05 08:20:44

标签: java spring 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());
}


  }

这是我的主要&#34;模块&#34;拥有&#34; displayModuleInfo&#34;我需要添加建议的方法:

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 个答案:

答案 0 :(得分:1)

你的切入点声明似乎格格不入。我创建了一个示例应用程序,它似乎应该是:

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

}

此声明匹配任何方法,其中name以displayModule类声明的objects.Modules开头。 IIRC您的声明将匹配任何方法,该类由名称以displayModule包中的Modules开头的类声明。

如果您错过了reference has great examples on how to create pointcuts