Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring AOP BeanCreationException由于;“切入点中的形式未绑定”;_Java_Spring_Aop_Aspectj_Aspect - Fatal编程技术网

Java Spring AOP BeanCreationException由于;“切入点中的形式未绑定”;

Java Spring AOP BeanCreationException由于;“切入点中的形式未绑定”;,java,spring,aop,aspectj,aspect,Java,Spring,Aop,Aspectj,Aspect,我对Spring AOP有问题 我试图在SpringMVC应用程序中实现方面 我得到的错误是: 原因:org.springframework.beans.factory.BeanCreationException: 创建名为“org.springframework.cache.annotation.AnnotationCacheOperationSource#0”的bean时出错: bean初始化失败;嵌套异常是 java.lang.IllegalArgumentException: 切入点中的

我对Spring AOP有问题

我试图在SpringMVC应用程序中实现方面

我得到的错误是:

原因:org.springframework.beans.factory.BeanCreationException:
创建名为“org.springframework.cache.annotation.AnnotationCacheOperationSource#0”的bean时出错:
bean初始化失败;嵌套异常是
java.lang.IllegalArgumentException:
切入点中的::0正式解除绑定时出错
是什么导致了这个问题

在XML文件中,我有以下内容:


我的方面类:

import org.apache.log4j.Logger;
导入org.aspectj.lang.JoinPoint;
导入org.aspectj.lang.annotation.Aspect;
导入org.aspectj.lang.annotation.Before;
导入org.aspectj.lang.annotation.Pointcut;
导入org.springframework.stereotype.Component;
@面貌
@组成部分
公共类应用程序监视器{
私有静态最终记录器=Logger.getLogger(ApplicationMonitor.class);
@切入点(value=“execution(*hr.mycompany.controller.impl.MyCompanyController.update(Object)))
公共无效更新emc(对象obj){}
@在(value=“ApplicationMonitor.updateEMC(对象)”之前)
更新之前的公共无效EMC(JoinPoint jp){
Object obj=jp.getArgs()[0];
logger.info(“BeforeUpdateEMC”+obj);
}
}
在pom.xml文件中,我有以下依赖项:


org.springframework
春季aop
4.1.5.1发布
org.aspectj
aspectjtools
1.8.10
org.aspectj
aspectjrt
1.8.10
org.aspectj
aspectjweaver
1.8.10
cglib
cglib
2.2
编辑(更改切入点后):


我更改了切入点,现在出现了如下错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [hr.mycompany.dao.IGenericHibernateDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}


09:11:27,871 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/BasicData-portlet]] (http--0.0.0.0-8083-2) StandardWrapper.Throwable: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyCompanyService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private hr.mycompany.dao.IGenericHibernateDao hr.mycompany.services.impl.MyCompanyService.vwObjectDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [hr.mycompany.dao.IGenericHibernateDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
@Controller 
public class MyCompanyController implements IMyCompanyController{

    @Autowired
    private IMyComapnyService myCompanyService;

}


@Service
public class MyCompanyService implements IMyComapnyService {

    @Autowired
    private IGenericHibernateDao<Object, Integer>  vwObjectDao;

}
我的应用程序有多个层和类,如下所示:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [hr.mycompany.dao.IGenericHibernateDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}


09:11:27,871 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/BasicData-portlet]] (http--0.0.0.0-8083-2) StandardWrapper.Throwable: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyCompanyService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private hr.mycompany.dao.IGenericHibernateDao hr.mycompany.services.impl.MyCompanyService.vwObjectDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [hr.mycompany.dao.IGenericHibernateDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
@Controller 
public class MyCompanyController implements IMyCompanyController{

    @Autowired
    private IMyComapnyService myCompanyService;

}


@Service
public class MyCompanyService implements IMyComapnyService {

    @Autowired
    private IGenericHibernateDao<Object, Integer>  vwObjectDao;

}
@控制器
公共类MyCompanyController实现IMyCompanyController{
@自动连线
私人IMyComapnyService myCompanyService;
}
@服务
公共类MyCompanyService实现IMyComapnyService{
@自动连线
私有IGenericHibernateDao vwObjectDao;
}
我试图为@Controller和@Service@Autowired方法提供建议

用户heonlyrao提出了正确的建议,但切入点语法错误。您要执行以下操作:

@Pointcut(“执行(*hr.mycompany.controller.impl.MyCompanyController.update(*)和&args(obj)”)
公共无效更新emc(对象obj){}
@之前(“更新EMC(obj)”)
更新之前的公共无效EMC(JoinPoint jp,对象obj){
//如果参数通过args()绑定,则不需要
//Object obj=jp.getArgs()[0];
logger.info(“BeforeUpdateEMC”+obj);
}
或者,与heonlyrao的建议类似,如果您不在多个建议中重复使用相同的切入点,也可以将其内联:

@之前(“执行(*hr.mycompany.controller.impl.MyCompanyController.update(*)和&args(obj)”)
更新之前的公共无效EMC(JoinPoint jp,对象obj){
//如果参数通过args()绑定,则不需要
//Object obj=jp.getArgs()[0];
logger.info(“BeforeUpdateEMC”+obj);
}

说明:错误消息显示:
在切入点中正式解除绑定
。这意味着您在切入点和/或通知方法签名中使用的形式参数未反映在切入点中,反之亦然。

您必须在
@pointcut(value=“execution(*hr.mycompany.controller.impl.MyCompanyController.update(Object))”中添加
和args(obj)
,就像
@pointcut(value=“执行(*hr.mycompany.controller.impl.MyCompanyController.update(对象))和args(obj)”)
它不是
,它是
&
。也许在这里回答的每个人都应该先学习Spring AOP或AspectJ语法。-@kriegaex:我实际上在manning的《Spring in action第四版》一书中读到过,根据这本书,它支持这两种功能,但刚刚测试过,似乎你是对的。
仅在XML配置中使用是的,你是对的,它被用在XMLI修改过的切入点中,现在我得到了如下错误:由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有[hr.mycompany.dao.igenerichbernatedao]类型的合格bean为依赖项找到:应至少有1个bean符合此依赖项的autowire候选。依赖项批注:{@org.springframework.beans.factory.annotation.Autowired(required=true)}org.springframework.beans.factory.BeanCreationException:创建名为“MyCompanyService”的bean时出错:自动连接依赖项的注入失败;我有多层应用程序,我正在尝试建议@Controller和@Service class方法,这是一个后续配置问题,与原始问题无关。您能解释一下吗告诉我问题出在哪里?我不能,因为这似乎是一个配置(例如bean命名)问题,我无法看到您的配置,因为没有。由于问题不再与AOP相关,我是AOP专家,而不是Spring用户,而且新问题是关于依赖项注入的,我认为您应该接受我的答案来结束这个问题,为新问题创建一个MCVE,然后使用MCVE和也许可以链接回这个问题,这样人们就可以了解你来自哪里。谢谢,克里斯。:-)