gpt4 book ai didi

java - 如何使用 xml 配置将服务 bean 传递到 spring boot Controller

转载 作者:行者123 更新时间:2023-12-01 20:18:35 24 4
gpt4 key购买 nike

我对注释不太满意。在我的 Spring Boot 应用程序中,我通过应用程序上下文在 Controller 中检索服务 bean。(我跳过了命名约定)

Say s1 = (Say) applicationContext.getBean("s1");

看来我的应用程序与spring紧密耦合,它正在制作样板代码。那么有没有办法通过xml配置将服务bean Autowiring 到 Controller 中呢?

我尝试过以下方法。但我收到类似“org.springframework.beans.factory.NoSuchBeanDefinitionException”的错误。下面我给出了代码:

Controller :

@RestController
public class Controller_Test implements SpringApplicationContextInterface
{
@Autowired
private Say s1;

@RequestMapping(value = "/test10")
public String Test1()
{
s1.test();
return "@RequestMapping(value = test10)";
}


}

public interface SpringApplicationContextInterface
{
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beanConfig.xml");

}

XML 配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<!--<context:annotation-config />-->

<bean class="com.fossians.maven_courses.Say" />
</beans>

我也尝试过:

<bean class="com.fossians.maven_courses.Say" id="s1" />

错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field s1 in com.fossians.maven_courses.Controller_Test required a bean of type 'com.fossians.maven_courses.Say' that could not be found.


Action:

Consider defining a bean of type 'com.fossians.maven_courses.Say' in your configuration.
...........................


Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'controller_Test': Unsatisfied dependency expressed through field 's1'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.fossians.maven_courses.Say' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
................................................


Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.fossians.maven_courses.Say' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
..............................

最佳答案

一种可能的解决方案是:

  1. 首先验证 xml bean 文件是否位于资源文件夹中。
  2. 验证 bean 定义是否已定义 id

<bean class="com.fossians.maven_courses.Say" id="s1">

  • 到达主应用程序类,在 SpringBoot 注释之后添加 bean xml 文件的导入,在本例中我使用了 spring-config.xml
  • @SpringBootApplication
    @ImportResource("classpath:spring-config.xml")

  • 转到 Controller 类并自动连接应用程序上下文
  • @Autowired
    private ApplicationContext context;

  • 如果您需要通过应用程序上下文获取 s1 bean,请使用:
  • ((Say)context.getBean("s1")).yourMethod();

  • 您还可以在 Controller 上 Autowiring s1 服务
  • @Autowired
    private Say sayBean;

  • 您还可以在 Say 类中使​​用 @Service 注释并自动连接到 Controller ,这取决于您的需求。
  • 希望有帮助。

    关于java - 如何使用 xml 配置将服务 bean 传递到 spring boot Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45292398/

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