SpringBoot中DataSourceAutoConfiguration注解

最近在学习springBoot时,其中有很大的一个核心的只是点:自动配置。

通过 DataSourceAutoConfiguration 学习 自动配置是如何实现的。

自动配置中比较重要的一个点就是 条件化配置?

1、条件化配置

JdbcTemplateCondition 的定义

package com.qxy.readinglist.conditions;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * 这个类 只有在 ClassPath里存在J
 */
public class JdbcTemplateCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        try {
            //加载 JdbcTemplate
            conditionContext.getClassLoader().loadClass("org.springframework.jdbc.core.JdbcTemplate");
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }
}

如何 JdbcTemplateCondition

@Bean
@Conditional(JdbcTemplateCondition.class)//只有满足 JdbcTemplateCondition 条件,才会生成 bean
public MyService myService(){
    return new MyService();
}

 到此位置,你应该知道 条件化配置是怎么回事了吧,然后继续来看看 DataSourceAutoConfiguration

@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class,
		DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {
   .....
}

  从上边可以看到,ConditionalOnClass,这个就是一个条件化注释,含义是:ClassPath里边有存在,DataSource.class, EmbeddedDatabaseType.class

原文地址:https://www.cnblogs.com/qxynotebook/p/9735174.html

时间: 2024-08-30 10:28:38

SpringBoot中DataSourceAutoConfiguration注解的相关文章

SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别

@Controller 处理http请求 @Controller //@ResponseBody public class HelloController { @RequestMapping(value="/hello",method= RequestMethod.GET) public String sayHello(){ return "hello"; } } 如果直接使用@Controller这个注解,当运行该SpringBoot项目后,在浏览器中输入:loc

springboot中常用注解总结

1.@RestController(组合注解):标注在类上,等价于@Controller和@Responsebody @Controller:将该类标记为Controller层的类,并且注入到Spring容器中 @Responsebody:注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或是 XML数据. 2.@SpringBootApplication:该注解标注标注在某个类上,代表这个类是

Springboot中enable注解

这句话可以作为理解springboot自动注入的原理的钥匙:ImportSelector接口的selectImports返回的数组(类的全类名)都会被纳入到spring容器中. 至于spring怎么根据类名创建bean的就不用管了.博文地址https://www.jianshu.com/p/464d04c36fb1 public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLo

SpringBoot中@EnableAutoConfiguration注解用法收集

参考: http://blog.csdn.net/xiaoyu411502/article/details/52770723 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-replacing-auto-configuration

Springboot 中AOP的使用

面向切面编程(Aspect Oriented Programming) 是软件编程思想发展到一定阶段的产物,是面向对象编程的有益补充.AOP一般适用于具有横切逻辑的场合,如访问控制.事务管理.性能检测等. 日志.异常处理.事务控制等都是一个健壮的业务系统所必须的.但是为了保证系统健壮可用,就要再众多业务方法中反复编写类似的代码,使得原本就很复杂的业务处理代码变得更加复杂.业务功能的开发者还要考两次这些额外的代码是否处理正确,是否有遗漏的地方,如果需要修改日志信息的格式或者安全验证的规则,或者再增

springboot中的常用注解

springboot中的常用注解个人觉得springboor中常用的注解主要可以分为三种:放入容器型注解.从容器中取出型注解和功能型注解.其中的放入容器型和从容器中取出型就是我们平时所说的控制反转和依赖注入的概念(个人版本- - - 可以看一看,别太当真 0.0) 放入容器型注解简介:个人觉得就是申明一个实例对象,然后将这个对象交给spring管理. 1.@Component:放在类上,把普通类实例化到spring容器中.可以说很多注解都是基于这个注解的. 2.@Bean: 放在方法上,用@Be

Springboot中使用自定义参数注解获取 token 中用户数据

使用自定义参数注解获取 token 中User数据 使用背景 在springboot项目开发中需要从token中获取用户信息时通常的方式要经历几个步骤 拦截器中截获token TokenUtil工具类解析token中的用户信息 把解析结果存入到成员变量中 controller中通过TokenUtil工具类提供的静态方法获取用户信息 下面是过程示例代码 /*--------1.拦截器中获取---------*/ String token =request.getHeader("token"

springboot中删除@SessionAttributes注解的属性

在SpringBoot中做登录登出的操作时,将用户通过@SessionAttributes注解存入到session中,很是方便.结果发现登出时,使用session.removeAttribute("user")没有用,不能登出. 发现问题之后,开始面向Baidu的编程. 原来我的登录时候存入的属性到session的方式: @SessionAttributes(value = {"userInfo"}) ... model.addAttribute("use

SpringBoot项目中自定义注解的使用

1.定义注解接口 /** * @Package: com.example.config * @Description: 定制一个接口 * @author: zfy * @date: 19/2/23 下午4:20 */ @Documented @Retention(RUNTIME) @Target(METHOD) public @interface MyLog {    String value() default "日志注解"; } [^Documented 注解]: Document