java—除了作为spring引导应用程序之外,spring配置是否可以只依赖于注解?

1tu0hz3e  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(193)

我是spring应用程序的新手,看到了springboot和spring配置之间的巨大差异。所以我的问题是:除了spring引导之外,有没有一种方法可以设置一个合适的spring应用程序(使用webmvc、security、aop等等),而不需要任何xml配置文件(即:config只依赖于注解)。

dwbf0jvd

dwbf0jvd1#

是的,在Spring有一种方法可以做到这一点。SpringBoot毕竟是一个增强的、自动配置的spring(还有其他很酷的特性)。这意味着springboot中的所有内容在spring中也应该是可以实现的,但是您必须自己做一些/很多额外的工作。
直截了当地说,为了实现你想要的,你需要采取以下步骤:
创建一个类,它将存储所有配置(基本上是存储在xml文件中的属性)——我们称之为appconfig.class
用@configuration注解appconfig.class-这将通知spring这个类是配置的源;
用@componentscan(“com.app”)注解appconfig.class——这里,您需要提供一个包,spring必须从中开始组件扫描,以便找到要在spring容器中注册的bean。重要的是,它将扫描包及其子包,因此您主要希望在这里提供顶级包;
如果需要将一些数据注入到bean中,则需要使用@propertysource(“classpath:application.properties“”-我在这里提供了默认值,spring boot在内部使用该值,以防您希望在运行时将一些数据注入bean。为此,需要将environment.class注入appconfig.class
在示例中显示:

@Configuration
@ComponentScan("com.app")
@PropertySource("classpath:application.properties")
public class AppConfig {

    // it will help to pull the properties incorporated in the file you have provided in the @PropertySource annotation
    private Environment environment;

//inject it
    public AppConfig(Environment environment) {
        this.environment = environment;
    }

// build your beans - the getProperty method accepts the key from application.properties
// file and return a value as a String. You can provide additional arguments to convert 
//the value and a default value if the property is not found
    @Bean
    public Product product() {

        return new Product(
                environment.getProperty("product.name", "XXX"),
                environment.getProperty("product.price", BigDecimal.class, BigDecimal.ZERO),
                environment.getProperty("product.quantity", Integer.class, 10)
        );
    }

}

我希望这会有帮助

相关问题