java.lang.IllegalArgumentException: attention pas de match pour ce type nom: ru.sbt.filial.cartes.d'aspect.SomeBean [Xlint:invalidAbsoluteTypeName]
Je n'ai jamais utilisé Spring AOP et d'essayer de configurer mon premier bean. Il semble que j'ai configuré correctement, mais j'obtiens une exception que le haricot n'est pas trouvé.
Mon aspect est –
@Aspect
@Component
public class IdentificationAspect {
@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean.*(..))")
public void logBefore(JoinPoint joinPoint) throws Throwable {
System.out.println("logBefore() is running!");
System.out.println("hijacked : " + joinPoint.getSignature().getName());
System.out.println("******");
}
}
Et mon haricot AOP ne trouve pas est -
package ru.sbt.filial.cards.aspect;
import org.springframework.stereotype.Component;
@Component
public class SomeBean {
public void printSmth() {
System.out.println("!!!!!!!!!!!");
}
}
J'ai l'exception suivante:
Caused by: java.lang.IllegalArgumentException: warning no match for this type name: ru.sbt.filial.cards.aspect.SomeBean [Xlint:invalidAbsoluteTypeName]
at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:207)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.getFallbackPointcutExpression(AspectJExpressionPointcut.java:358)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.matches(AspectJExpressionPointcut.java:255)
at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:208)
at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:262)
at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:294)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:117)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:87)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:356)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:319)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:412)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1629)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:162)
... 165 more
J'ai suivant les dépendances maven -
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.3</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.3</version>
</dependency>
Et mon printemps applicationContext.xml la configuration est -
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<mvc:annotation-driven/>
<aop:aspectj-autoproxy/>
<bean id="someBean" class="ru.sbt.filial.cards.aspect.SomeBean">
</bean>
Mise à JOUR
J'ai ajouté à mon Ressort de la configuration de la ligne de
<context:component-scan base-package="ru.sbt.filial.cards.aspect"/>
mais toujours le même message. J'ai aussi essayé d'annoter les différentes façons - et si je ne spécifiez pas la fève c'est à dire l'écriture
@Before("execution(* ru.sbt.filial.cards.aspect.*.*(..))")
au lieu
@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean.*(..))")
Je n'ai pas d'erreur lors du chargement, mais aop méthode n'est pas appelée.
J'ai aussi essayé d'annoter comme ce
@Before("this(ru.sbt.filial.cards.aspect.SomeBean) and execution(* printSmth(..))")
mais avec le même résultat: pas de match pour ce type de nom. Plus d'idées??
néanmoins, il ne fonctionne pas?
OriginalL'auteur Dmitry Ivanov | 2014-02-10
Vous devez vous connecter pour publier un commentaire.
J'ai le même problème que vous et je l'ai résolu de la mine. Je vous donne deux suggestions, vous pouvez l'essayer.
Veuillez modifier le @Avant d'annotation dans l'aspect de la classe comme l'un des éléments suivants:
@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean.logBefore(..))")
ou
@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean..*(..))")
Espère que cela aide.
Je suppose que la première '.' est un point lui-même, mais la seconde ( " . " est un caractère générique correspondant à un caractère, et '*' signifie correspondant à un nombre. Donc
SomeBean..*(..)
moyens de répondre à l'ensemble des méthodes deSomeBean
commeSomeBean.methodA(..)
ouSomeBean.methodB(..)
.OriginalL'auteur Daniel
Pour exécuter avec succès, Dans votre printemps applicationContext.xml fichier de configuration ajouter
Que vous avez utilisé
@Component
annotation dans SomeBean classeMise à jour:
essayer en ajoutant le nom de la méthode de @Avant:
OriginalL'auteur Abhishek Nayak
vous perdez la classe.
@Before("execution(* ru.sbt.filial.cards.aspect.**SomeBean.***(..))")
À votre façon, "somebean" est un package, le * après c'est une méthode, et vous devriez mettre les classes
entre eux.
Vous pouvez le faire comme
@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean.* .*(..))")
ou
@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean..*(..))")
OriginalL'auteur s7raybird