1.Assert

java断言assert是jdk1.4引入的。assert这个关键字我们称之为“断言”。当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。当这个关键字后面的条件为真的时候,程序继续执行下一句语句。

  Assert.hasText(role, "A granted authority textual representation is required");

2.equalsIgnoreCase()和equals()的区别

 
String a="ABC";
a.equals("abc")为false,
a.equalsIgnoreCase("abc")为true;
equalsIgnoreCase与equals区别是前者不区分大小写,而后者区分

3.instanceof

instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

以下实例创建了 displayObjectClass() 方法来演示 Java instanceof 关键字用法:

4.@ConditionalOnProperty的作用和用法

在spring boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty注解来控制@Configuration是否生效.

配置类代码:

@Configuration
@ConditionalOnProperty(prefix = "filter",name = "loginFilter",havingValue = "true")
public class FilterConfig {
//prefix为配置文件中的前缀,
//name为配置的名字
//havingValue是与配置的值对比值,当两个值相同返回true,配置类生效.
@Bean
public FilterRegistrationBean getFilterRegistration() {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean(new LoginFilter());
filterRegistration.addUrlPatterns("/*");
return filterRegistration;
}
}

配置文件中的代码

filter.loginFilter=true

当配置文件中值为true时:输出了"过滤器"三个字,说明loginFilter生效了,说明配置类生效了.

当配置文件中值为false时:没有输出了"过滤器"三个字,说明loginFilter没有生效,说明配置类没有生效.

总结:

通过@ConditionalOnProperty控制配置类是否生效,可以将配置与代码进行分离,实现了更好的控制配置.
@ConditionalOnProperty实现是通过havingValue与配置文件中的值对比,返回为true则配置类生效,反之失效.

5.建立META-INF/spring.factories文件的意义何在

 

平常我们如何将Bean注入到容器当中

@Configuration
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration { @Autowired
HelloProperties helloProperties; @Bean
public HelloService helloService() {
HelloService service = new HelloService();
service.setHelloProperties( helloProperties );
return service;
}
}

一般就建立配置文件使用@Configuration,里面通过@Bean进行加载bean

或者使用@Compont注解在类上进行类的注入

注意:

在我们主程序入口的时候:

@SpringBootApplication这个注解里面的东西

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

里面注解@EnableAutoConfiguration

@ComponentScan注解指扫描@SpringBootApplication注解的入口程序类所在的basepackage下的

所有带有@Component注解的bean,从而注入到容器当中。

但是

如果是加入maven坐标依赖的jar包,就是项目根目录以外的Bean是怎么添加的??

这个时候注解@EnableAutoConfiguration的作用就来了

导入了AutoConfigurationImportSelector这个类:

这个类里面有一个方法

    /**
* Return the auto-configuration class names that should be considered. By default
* this method will load candidates using {@link SpringFactoriesLoader} with
* {@link #getSpringFactoriesLoaderFactoryClass()}.
* @param metadata the source metadata
* @param attributes the {@link #getAttributes(AnnotationMetadata) annotation
* attributes}
* @return a list of candidate configurations
*/
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
+ "are using a custom packaging, make sure that file is correct.");
return configurations;
}

@EnableAutoConfiguration注解来注册项目包外的bean。而spring.factories文件,则是用来记录项目包外需要注册的bean类名

为什么需要spring.factories文件,
因为我们整个项目里面的入口文件只会扫描整个项目里面下的@Compont @Configuration等注解
但是如果我们是引用了其他jar包,而其他jar包只有@Bean或者@Compont等注解,是不会扫描到的。
除非你引入的jar包没有Bean加载到容器当中
所以我们是通过写/META-INF/spring.factories文件去进行加载的。

最新文章

  1. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(一)
  2. javascript-test1
  3. 关押罪犯(codevs 1069)
  4. python 迭代器、生成器、装饰器
  5. MongoDB Enterprise提供的服务
  6. Ubuntu 14.04远程登录服务器--ssh的安装和配置
  7. 测试cnblogs是否存在链接引用的bug
  8. Documentation/sched-bwc.txt 的中文翻译
  9. JS读写Cookie(设置、读取、删除)
  10. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
  11. 用maven来创建web工程
  12. 应用控制台应用程序开发批量导入EXEL程序。
  13. Linux命令行参数前加--,-和不加杠
  14. spring boot利用controller来测试写的类
  15. js 数字数组按大小排序
  16. CF1133E K Balanced Teams(DP)
  17. B-spline Curves 学习之B样条基函数的定义与性质(2)
  18. TestNG参数化之@Parameters传参
  19. BZOJ 3790 神奇项链(manacher+DP+树状数组)
  20. UI控件---UIWebView

热门文章

  1. nginx负载均衡初体验
  2. v-model指令的学习
  3. ASP.NET Core 6框架揭秘实例演示[08]:配置的基本编程模式
  4. Three.js之绘制中文文字并跟随物体
  5. 华为服务器设置iBMC管理网口IP地址,开启Monitor图文教程
  6. 【C#TAP 异步编程】异步接口 OOP
  7. vue--前端路由及vue-router两种模式
  8. ubuntu系统黑屏,只有一个光标
  9. Qt:QWidget
  10. WIN10:显示文件后缀.exe