首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建基于自动配置spring boot 1.4.0的控制器

如何创建基于自动配置spring boot 1.4.0的控制器
EN

Stack Overflow用户
提问于 2016-09-18 05:48:29
回答 3查看 3.4K关注 0票数 1

我使用的是spring boot 1.4.0

我只想在某些情况下在我的spring boot应用程序中创建一个控制器。例如,如果存在命名为"neededBean“的bean。

此"neededBean“位于AutoConfiguration类中,只有在特定条件下才会创建它。

我想要避免创建控制器,如果neededBean不满足其自动配置condition.So,我不能用@Controller注释我的类,因为它将被创建,而与自动配置类无关

有什么方法可以实现我想要的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-18 14:18:19

对于你的提议,org.springframework.boot.actuate.endpoint.mvc.AbstractMvcEndpoint是一个很好的开始。

这是一个例子,这只是给出了你的情况的解决方案,但对现实世界没有用处。这里我使用的是@ConditionalOnClass,但对于您来说,需要使用@ConditionalOnBean@ConditionalOnMissingBean

RabbitEndpoint.java -只有在使用Tomcat时才会自动配置。

代码语言:javascript
运行
复制
/**
 * @author lhuang
 */
@ConditionalOnClass(value = Tomcat.class)
public class RabbitEndpoint extends AbstractMvcEndpoint {
    public RabbitEndpoint() {
        super("rabbit", true);
    }

    @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    public void invoke(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        System.out.println(" ------ Auto-Configuration on Tomcat.class Conditional ------ ");
    }
}

META-INF/spring.factory,注册自动配置类

代码语言:javascript
运行
复制
org.springframework.boot.autoconfigure.EnableAutoConfiguration=io.cloudhuang.web.RabbitEndpoint

然后启动spring boot应用程序,访问路径"http://localhost:8080/rabbit

您将获得控制台输出

代码语言:javascript
运行
复制
 ------ Auto-Configuration on Tomcat.class Conditional ------ 
票数 1
EN

Stack Overflow用户

发布于 2016-09-18 13:25:12

由于组件扫描,仅检测到@Controller。默认情况下,您可以删除整个组件扫描或排除该包。然后设置一个@Configuration类,该类的条件是现有的另一个bean。在该配置中,您告诉它扫描控制器包以添加适当的控制器。

另一种选择是,如果为正在运行的应用程序设置了特定的活动配置文件,则使用@Profile仅启用控制器。您可以在您希望使用的场景中指定该配置文件。

票数 3
EN

Stack Overflow用户

发布于 2016-09-18 14:30:24

看一下docs中的@ConditionalOnBean注释。

您可以将此注释添加到Controller中并指定bean的名称,因此只有在应用程序上下文中有此bean时,才会实例化该bean。

代码语言:javascript
运行
复制
@ConditionalOnBean(value=MyBean.class, name="NameOfMyBean")
@Controller
public class MyController{

  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39552060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档