SpringBoot启动配置类(二)【@Configuration注解的配置类如何被加载到?】

spring容器在启动的时候会去扫描@Configuration,并将相关的类进行加载。那么spring容器怎么去扫描的呢?

配置类与启动类同包或者在其子包下

springboot配置数据库连接池

@Configuration
public class DruidConfig {

    //跟配置文件绑定
    //spring.druid.xx xx跟DruidDataSource里的属性绑定
    @ConfigurationProperties(prefix = "spring.druid")
    //spring容器启动时,DruidDataSource调用内部init方法启动,关闭时,调用内部close方法关闭
    @Bean(initMethod = "init",destroyMethod = "close")
    public DruidDataSource dataSource(){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setProxyFilters(Lists.newArrayList(statFilter()));
        return dataSource;
    }

    /**
     * 定义慢sql的Filter,出现慢sql可以打印出来
     * @return
     */
    @Bean
    public Filter statFilter(){
        StatFilter statFilter=new StatFilter();
        //设定多长时间属于慢SQL  这里设置为5秒属于慢SQL
        statFilter.setSlowSqlMillis(5000);
        //设置是否打印慢SQL日志
        statFilter.setLogSlowSql(true);
        //是否将日志合并
        statFilter.setMergeSql(true);
        return statFilter;
    }

    /**
     * 添加监控bean 用来监控慢SQL日志等等
     * 服务启动后,输入地址:http://localhost:8080/druid/index.html查看监控
     * 如果存在慢SQL,则控制台会打印出来
     * 例如:slow sql 21 millis. select id,name,phone,email from user[]
     * @return
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        return new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
    }

}

如果DruidConfig所在包名为:com.ft.abc.xx,而启动类所在包名为:com.ft.abc,那么满足spring的扫描条件,配置被成功加载。如果不满足包名条件的情况下,还想让配置类加载成功,该怎么办?看下一种方式。

spring.factories文件的配置

在resources目录下新建META-INF目录,并在该目录下创建spring.factories文件。spring.factories文件内容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ft.xx.config.DruidConfig

第一行是spring自动配置的路径,第二行是我们自己要指定加载配置类的路径。
这样的话,spring也会去找到该配置类,并且加载它。

自定义注解指定配置类

假设前两种都不用,那么可以自定义一个注解,并将注解加到启动类中,也能达到目的。
自定义注解如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(DruidConfig.class)
public @interface EnableDruidConfig {

}

这个注解里已经将DruidConfig配置类引入了。
启动类加上该注解:

@SpringBootApplication
@EnableDruidConfig
public class HourseApplication {

	public static void main(String[] args) {
		SpringApplication.run(HourseApplication.class, args);
	}

}

启动spring容器,配置类加载成功!

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@Configuration注解是Spring框架中的一个注解,用于标识一个配置配置是用来定义和组织Bean的创建和配置。在@Configuration注解中,可以使用@Bean注解来定义Bean的创建方法。配置中的@Bean方法会在容器启动时被调用,并将返回的对象注册为Bean供其他组件使用。 在引用中的示例代码中,@Configuration注解被用于标识MyConfig为一个配置,并通过value属性设置了配置的名称为"lixlConfig"。这样,在其他地方引用该配置时可以使用这个名称来指定。 在引用中的示例代码中,通过使用Spring Boot的启动MainApplication,可以获取到容器中所有Bean的名称。这样可以验证配置是否被正确加载,并且可以查看配置的名称是否与预期一致。 在引用中的示例代码中,使用@Configuration注解的MyConfig的value属性设置为"lixlConfig",并将proxyBeanMethods属性设置为false。该属性用于控制是否开启代理Bean方法的功能。当该属性为true时(默认值),Spring容器会根据@Bean方法的返回型生成一个代理对象,用于控制方法的调用。当该属性为false时,Spring容器不会生成代理对象。 总结起来,@Configuration注解用于标识一个配置,并通过其value属性设置配置的名称。配置中可以使用@Bean注解定义Bean的创建方法。@Configuration注解还可以通过proxyBeanMethods属性控制是否开启代理Bean方法的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [springboot @Configuration注解](https://blog.csdn.net/weixin_38879931/article/details/122899017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [springboot @Configuration 注解详解](https://blog.csdn.net/nruuu/article/details/126798703)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值