我的Spring Boot应用程序中具有以下类层次结构:
@Override
public void launchServer() {
try {
ChannelFuture serverChannelFuture = serverBootstrap.bind(hostAddress).sync();
log.debug("TCP Server is STARTED : port {}",hostAddress.getPort());
serverChannel = serverChannelFuture.channel().closeFuture().sync().channel();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
shutdownQuietly();
}
}
在这种情况下,一切正常。
但是当我在public abstract class A {
private final ObjectMapper objectMapper = new ObjectMapper();
public void method1(Object object) {
this.objectMapper.writeValueAsString(object);
}
}
@Component
public class B extends A {
public void method2() {
method1();
}
}
声明中添加@Transactional(rollbackFor = Exception.class)
注释时,例如:
method2()
并执行public abstract class A {
private final ObjectMapper objectMapper = new ObjectMapper();
public void method1() {
this.objectMapper; // always NULL
}
}
@Component
public class B extends A {
@Transactional(rollbackFor = Exception.class)
public void method2() {
method1();
}
}
并在method2()
中以NullPointerException
失败,因为method1()
为this.objectMapper
;
即使添加了NULL
,如何让Spring正确初始化private final ObjectMapper objectMapper
?
此外,在使用@Transactional(rollbackFor = Exception.class)
注释的情况下,@Transactional
的类为this
,而没有注释的只是普通的B$$EnhancerBySpringCGLIB
。因此,似乎CGLIB无法正确初始化B
。.是否有解决方法?