这期主要整理SpringBoot中的一些知识点,便于以后快速查看
提示:这是我的个人IT资源网站,所有资源都免费,注册登录后就可以看到密码,需要什么大家尽情选取!
- 当我们通过@Autowired注入的时候,如果注入的对象是用接口生命,而此时接口实现类有多个,那么就会报错,无法通过编译,因为此时发生了歧义,容器不知道加载哪个实现类,容器加载的时候,主要通过类名和类型来查找的,此时类型相同,所以就不知道加载哪个,有两个解决办法,一是通过在类上加注解@Primary,指定优先加载此类,那么当发生歧义的时候,会优先加载加@Primary的类,但是这种方法局限性太大,可能其它地方并不需要加载此类,第二种方法就是通过类名具体定位了,容器加载类时,会给类起一个别名,如果我们没有特别标注别名,那么一般是类名首字母小写就是别名,我们需要在注入的地方加上注解@Qualifier(""),这样容器就能定位到我们需要注入的类了。
- 我们如果想让容器管理某个自定义类,那么需要给类加上解释注解,表明让容器去加载,一般没有特殊含义的类,我们使用@Component或者@Bean注解,@SpringBootApplication注解中已经包含@ComponentScan注解,所以是在启动类当前包和子包的注释的类都会被容器加载,但是如果我们想让容器也管理我们外部的jar包,那么我们就需要在某个配置类上加上@ComponentScan注解,并且指定扫描的范围以及策略,一般容器加载的时候,就帮我们实例化了,但是有时候我们想用的时候再实例化,那么可以加上lazyInit = true。
- 如果我们希望类的一些属性从配置文件中初始化,那么可以使用@Value("${}")注解,如果配置文件的名称和类属性名完全一致,则可以在类上加注解@ConfigurationProperties(“前缀”),默认找的是application.properties,有时候我们可能写在了其它的配置文件,那么需要@PropertySource(value={“文件相对路径”}, ignoreResourceNotFound = true)注解声明配置文件路径。
- @Conditional注解可以通过判断条件是否满足去装配Bean,需要我们自定义一个条件判断类,实现Condition接口,然后在需要判断的方法或类上加上@Conditional(自定义条件判断类)。
- 当我们测试时,可以使用AnnotationConfigApplicationContext去加载某个特定包,那么只会装配该包下的类以及涉及的其他包的类,我们可以设置装配类的作用域,默认是ConfigurableBeanFactory.SCOPE_SINGLETON,代表单例,我们每次去取都会取到同一个实例,所有Spring应用可以使用,相对应的就是ConfigurableBeanFactory.SCOPE_PROTOTYPE,代表多例,每次去取都会取到不同实例,对于Web应用则对应三个作用域,request、session、application,request代表Web工程单次请求,每次请求都会产生一个新实例,WebApplicationContext.SCOPE_REQUEST,session代表一个HTTP会话产生一个实例,WebApplicationContext.SCOPE_SESSION,application代表整个Web工程一次生命周期内使用同一个实例,WebApplicationContext.SCOPE_APPLICATION,在使用它们三个时,需要加上proxyMode = ScopedProxyMode.TARGET_CLASS,不然无法启动,会报错。
- 有时候我们整合的框架不是以注解装载Bean的,例如Dubbo,那么就需要我们通过XML装载Bean了,此时在需要装载的地方加上注解@ImportResource。
- 当我们自定义数据源信息时,启动后会报Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedde的错,是因为容器在启动时,会自动去application的配置文件中找spring.database的信息,所以我们需要在@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})中排出加载spring.database信息,这样就不会报错了。
- 在idea的Run/Debug Configuration中切换SpringBoot多环境,优先级Program arguments(程序参数,不能切换配置文件):输入指令–spring.profiles.active=* > 在Active Profiles(指定当前运行项目环境,能切换配置文件):输入* > 在VM options(JVM参数,能切换配置文件)输入-Dspring.profiles.active=* > 在Environment variables(系统环境变量,能切换配置文件): 输入spring.profiles.active=*,程序参数和指定当前运行项目环境只在WEB项目中起作用,JVM参数和系统环境变量在WEB项目和main函数中加载配置类都起作用
- 使用注解@Value或@ConfigurationProperties将属性文件赋值类属性时,需要在@Autowired或@Resource依赖注入情况下使用,不能main函数中直接加载配置类使用,获取不到值