SpringBoot工程中,如果使用@Transactional标注一个方法,通过ApplicationContext就会获取不到bean,以下是代码和执行结果:
@RestController
@RequestMapping("/pii")
@DependsOn("springContextUtil")
public class PiiMiddleController {
@Resource
private ClAcctSequenceCreateService clAcctSequenceCreateService;
private TestService testService = (TestService)SpringContextUtil.getBean("testService");
@GetMapping("/test")
private String test() {
return testService.toString();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void test2() {
System.out.println(testService.toString());
}
}
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return context;
}
public static Object getBean(String name) {
return context.getBean(name);
}
}
@Service
public class TestService {
}
将@Transactional注释掉:
这样就可以正常调用
这个问题好像和注入方式无关,我使用@Resource注解注入再这样测试,结果是一样的