2016-11-05 5 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); 
} 

    } 

Я не могу определить, почему советы не работают. Это о/р я получаю

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 

У меня есть эти дополнительные эти банки для АОП: enter image description here

Будет очевидно, что я здесь отсутствует?

ответ

1

Ваше заявление pointcut кажется искаженным. Я создал пример приложения, и кажется, что это должно быть:

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

} 

Эта декларация соответствует какой-либо метод, где имя начинается с displayModule объявленного objects.Modules класса. IIRC ваша декларация будет соответствовать любому методу, объявленному классом, имя которого начинается с displayModule, находящегося в пакете Modules.

В случае, если вы его пропустили, reference has great examples on how to create pointcuts.

+0

О, мой плохой ... Как я могу пропустить это ... objects.Modules .. Я не использовал имя пакета .. Его рабочий fn теперь .. Спасибо Мужчина –

+0

'objects.Modules' должно быть полное имя класса. Я основывал его на «пакете», показанном в вашем примере. – Apokralipsa