2014-02-10 31 views
9

我从来没有使用Spring AOP并尝试配置我的第一个bean。似乎我正确地配置了它,但是我得到了一个异常,发现这个bean没有找到。java.lang.IllegalArgumentException:此类型名称的警告不匹配:ru.sbt.filial.cards.aspect.SomeBean [Xlint:invalidAbsoluteTypeName]

我的方面是 -

@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("******"); 
    } 
} 

我的豆是AOP没有发现是 -

package ru.sbt.filial.cards.aspect; 

import org.springframework.stereotype.Component; 

@Component 
public class SomeBean { 

    public void printSmth() { 
     System.out.println("!!!!!!!!!!!"); 
    } 

} 

我有以下异常 -

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 

我有遵循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> 

我的春天的applicationContext.xml配置 -

<?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> 

UPDATE 我加入到我的Spring配置线

<context:component-scan base-package="ru.sbt.filial.cards.aspect"/> 

但还是同样的信息。我也试图诠释不同的方式 - 如果我不指定bean即写 -

@Before("execution(* ru.sbt.filial.cards.aspect.*.*(..))") 

代替

@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean.*(..))") 

我对装载没有错误,但不调用AOP方法。

我也试图诠释这样

@Before("this(ru.sbt.filial.cards.aspect.SomeBean) and execution(* printSmth(..))") 

但同样的结果 - 敌不过这种类型的名称。还有什么想法?

+0

您错过了在配置文件 – Rembo

+0

中添加bean IdentificationAspect仍然不起作用? – Rembo

回答

0

要成功运行,在你的applicationContext.xml春天配置文件中加

<context:component-scan base-package="ru.sbt.filial.cards.aspect"/> 

当你使用SomeBean类@Component注释

更新:

尝试通过添加方法名@Before :

@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean.logBefore(..))") 
+0

我添加了,但仍然是相同的消息。我也试着用不同的方式注释 - 如果我没有指定bean名称 - –

12

我有同样的pr你和我解决了我的问题。我给你两个建议,你可以试试看。 请修改切面类中@Before注解为以下之一:

@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean.logBefore(..))")

@Before("execution(* ru.sbt.filial.cards.aspect.SomeBean..*(..))")

希望它能帮助。

+3

对于我来说,从“。*”更改为“.. *”解决了我在JBoss 7中部署时遇到的问题。但是,您能解释为什么“.. *”是否需要? (“。*”在我的独立单元测试中工作得很好) – caprica

+1

@caprica我想第一个'。'是一个点本身,但第二''。是匹配任何字符的通配符,'*'表示匹配任何数字。所以'SomeBean .. *(..)'意味着像SomeBean.methodA(..)或SomeBean.methodB(..)一样匹配'SomeBean'的所有方法。 – CDT

相关问题