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

时间:2016-09-17 21:48:29

标签: spring-mvc spring-boot

我正在使用spring boot 1.4.0

我只想在特定条件下在Spring启动应用程序中创建一个Controller。 Ex如果有一个带有某个名称的bean" needsBean。

这" neededBean"在AutoConfiguration类中,它将仅在某些条件下创建。

我想避免控制器的创建,如果needBean没有确定其自动配置条件。所以我不能使用@Controller注释我的类,因为它将被创建而不管自动配置类

有没有办法达到我想要的目的?

3 个答案:

答案 0 :(得分:2)

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

另一种选择是使用@Profile仅在为正在运行的应用程序设置特定活动配置文件时启用控制器。您可以在希望使用它的方案中指定该配置文件。

答案 1 :(得分:1)

org.springframework.boot.actuate.endpoint.mvc.AbstractMvcEndpoint是您提出的良好开端。

以下是一个示例案例,这只是为您的案例提供解决方案,但对现实世界无用。 我在这里使用@ConditionalOnClass,但对您而言,需要使用@ConditionalOnBean@ConditionalOnMissingBean

RabbitEndpoint.java - 仅在使用Tomcat时自动配置。

/**
 * @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.factories,注册自动配置类

org.springframework.boot.autoconfigure.EnableAutoConfiguration=io.cloudhuang.web.RabbitEndpoint

然后启动spring boot app,访问路径“http://localhost:8080/rabbit

您将获得控制台输出

 ------ Auto-Configuration on Tomcat.class Conditional ------ 

答案 2 :(得分:0)

查看docs中的@ConditionalOnBean注释。

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

@ConditionalOnBean(value=MyBean.class, name="NameOfMyBean")
@Controller
public class MyController{

  ...
}