gpt4 book ai didi

java - 从springBoot中的不同类调用方法

转载 作者:行者123 更新时间:2023-11-30 10:04:51 24 4
gpt4 key购买 nike

我想调用一个包含 applicationContext 的方法,该方法在独立运行时工作正常,但当我尝试从不同的类调用它时 appContext.getBean(DataSource.class) 返回 null。

public class Action {

private static Logger log = LoggerFactory.getLogger(Action.class);

@Autowired
MessageConfigProperties messageProperties;

@Autowired
AutomatorApp automatorApp;

@Autowired
Apps gapps;

@Autowired
Deploy d;

@Autowired
Deploy depstatusChk;

@Autowired
private ApplicationContext appContext;

@Autowired
CreateSaltFileService createSaltFile;

@Autowired
DeployFactory depFactory;

@Autowired
IMoveAppsService moveAppsService;

@Autowired
IUserEnvironmentService userEnvService;

@Autowired
IEnvironmentService envService;

@Autowired
Session session;

private Logger logger = LoggerFactory.getLogger(Action.class);
private ServletContext context;

@Context
public void setServletContext(ServletContext context) {
System.out.println("servlet context set here");
this.context = context;
}

@POST
@Path("/register/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@RequiresRoles("admin")
@RequiresPermissions("automator:register")
public Session register(Session credentials, @BeanParam Session springContext) throws AppException {
System.out.println("into action class");
System.out.println("-->>>" +appContext.getBean(DataSource.class));
appContext.getBean(DataSource.class);
logger.info(messageProperties.getGreetings());
// logger.trace("Inside Session");
System.out.println("Inside Session");
credentials.setDatasource(springContext.getDatasource());

当这个Action方法被调用时

这个方法agentGroup在不同的类

@POST
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Get List of agent group", response =
AgentGroup.class, responseContainer = "List")
public ArrayList<AgentGroup> agentGroup(Session credentials, @BeanParam Session springContext) throws AppException, ConfigException, InterruptedException {

Session r=objA.register(credentials, springContext);
int sessionId=r.getSessionId();
}

最佳答案

@Autowire ApplicationContext appContext只是为了获取数据源(appContext.getBean(DataSource.class))。

为什么不直接@Autowire DataSource 数据源?它将使您的 Action 类的业务逻辑独立于 Spring。

如果你真的想访问ApplicationContext,你可以尝试另一种方法

使 Action 实现 ApplicationContextAware

私有(private)ApplicationContext ctx;

  @Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
ctx = applicationContext;
}

参见 Circular dependency in Spring了解详情。

编辑:您的 Action 类没有注释。没有 org.springframework.web.bind.annotation。 RestController,没有 @Component@Service。你确定它是由Spring管理的吗?如果它只是使用 new 创建的,那么 Autowire 将不起作用并且字段将为空。

关于java - 从springBoot中的不同类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55629963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com