我有一个弹簧启动应用程序,其中有一个方面记录方法名称和争论。
@Component
@Aspect
public class LoggingAspect {
@Autowired
private ParameterNameDiscoverer parameterNameDiscoverer;
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
@Pointcut("within(@org.springframework.stereotype.Service *)")
public void beanAnnotatedWithServiceOrASpecializationOfIt() {}
...
...
}
但是当我部署应用程序时,它说
Could not autowire field: private org.springframework.core.ParameterNameDiscoverer
以下是正在使用的pom.xml文件的一部分
<properties>
<java.version>1.8</java.version>
<start-class>SampleApplication</start-class>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.M5</version>
</parent>
我想将方法争论名称及其值作为一个方面进行记录。我得到的方法是争论的价值而不是他们的名字。
答案 0 :(得分:2)
假设您正在使用java配置,您需要确保在代码中的某个地方使用@Configuration
进行注释,类似这样:
@Bean
public ParameterNameDiscoverer parameterNameDiscoverer() {
return new DefaultParameterNameDiscoverer();
}
注意:对于您的特定用例,可能有更合适的ParameterNameDiscoverer
实现,您应该查看spring文档以获取详细信息。
答案 1 :(得分:1)
你真的在spring上下文中有一个ParameterNameDiscoverer吗?如果您希望将其作为spring boot auto配置的一部分创建,您将能够在启动时通过Boot吐出的自动配置日志中看到它。
您可能需要将自己的ParameterNameDiscoverer配置为Bean,或者添加额外的类路径依赖关系,以便Spring引导在自动配置期间为您创建一个。