我已经创建了一个注释来调用Spring Boot项目中的Spring AOP方面。所有的工作都很好,直到我尝试将一个依赖项自动转化到方面:自动转化不会发生。
我在stackoverflow的各种问题中读到,这是因为方面不是Spring管理的。如果之前已经回答了这个问题,请原谅,但是我已经尝试了stackoverflow中提到的各种解决方案,包括使用@Configurable和实现ApplicationContextAware。
/**
* Aspect applying the annotation {@link LogDuration} to where ever it has been added, see {@link #logDuration(ProceedingJoinPoint, LogDuration)}.
*/
@Configurable
@Aspect
public class LogDurationAspect {
private static final Logger LOGGER = LogManager.getLogger( LogDurationAspect.class );
@Autowired
private TimeMeasurer timeMeasurer;// = new TimeMeasurer();
public LogDurationAspect() {
}
/** For any method with @LogDuration, no matter what the return type, name, or arguments are, call this method to log how long it takes. */
@Around("@annotation(annotation)")
public Object logDuration( ProceedingJoinPoint joinPoint , LogDuration annotation ) throws Throwable {
System.out.println( timeMeasurer );
final long startTime = timeMeasurer.now();
try{
final Object result = joinPoint.proceed();
final long duration = timeMeasurer.timeSince( startTime );
LOGGER.info( String.format( "%s returned %s took %d ms %.3f s" , annotation.value() , result , duration , 0.001 * duration ) );
return result;
}
catch ( Throwable t){
final long duration = timeMeasurer.timeSince( startTime );
LOGGER.error( String.format( "%s took %d ms %.3f s" , annotation.value() , duration , 0.001 * duration ) , t);
throw t;
}
}
}
/**
* Simple annotation which will log the duration of a method via {@link LogDurationAspect#logDuration(org.aspectj.lang.ProceedingJoinPoint, LogDuration)}.
*/
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
public @interface LogDuration {
String value();
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = LogDurationAspectITests.TestConfiguration.class )
public class LogDurationAspectITests {
@Autowired
private TestListener underTest;
@Rule
public OutputCapture outputCapture = new OutputCapture();
@Autowired
private TimeMeasurer timeMeasurer;
@Test
public void annotationWorks() {
// prove that scanning is working
assertThat( timeMeasurer , is( notNullValue( ) ) );
underTest.doIt( 1234 );
assertThat( outputCapture.toString() , containsString ( "doIt 1 2 3 returned 2468 took") );
}
@SpringBootApplication
@Configuration
public static class TestConfiguration {
}
}
@Component
public class TimeMeasurer{
/** @return milliseconds between now and start.*/
public long timeSince( long start ) {
return now( ) - start;
}
/** @return current time in milliseconds. */
public long now( ) {
return System.currentTimeMillis( );
}
}
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
以及如何调试方面?
谢谢
向使用Aspects.AspectOf的配置类添加了一个bean
@SpringBootApplication
@Configuration
public static class TestConfiguration {
/**
* This is needed to get hold of the instance of the aspect which is created outside of the spring container,
* and make it available for autowiring.
*/
@Bean
LogDurationAspect logDurationAspect()
{
final LogDurationAspect aspect = Aspects.aspectOf(LogDurationAspect.class);
return aspect;
}
}
我与SpringBoot和JPA合作。我收到一个无法完成的错误。 这是我的主要课程: 这是我的班级失败的原因: 这是类: 这是错误消息: 错误创建bean的名称'请求LoggerImpl':注入自动生成的依赖失败; 无法自动关联字段:专用com。存储库。请求logdao.com。记录器。impl。RequestLoggerImpl。请求logdao;嵌套的异常是org。springframewor
这里怎么了?是否可以使用这样的PowerShell脚本? 我可以通过HTML页面调用此脚本吗(因为我将在网页上放置许多其他资源,这些资源将作为开发人员的一个链接,这样我们就不会在每次需要它们时浪费时间和精力去查找它们)?是否可以将应用程序注册到URI方案? 还有其他(标准)方法吗?
我有一个应用类 我有控制器课 并且,我想为Application test编写一个测试用例,以确保创建的实例类型为HelloController 但是,我在自动连接 hello控制器变量时遇到错误(找不到 hello 控制器类型的 bean)。根据我的理解,@SpringBootTest应该创建上下文并返回一个实例。我们不需要编写任何上下文 xml 或使用任何注释Config 类来获取实例。缺少了
本文向大家介绍Python自动连接ssh的方法,包括了Python自动连接ssh的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python自动连接ssh的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类
我有一个简单的组件类: 在构造函数的参数中,IntelliJ报告: