和@Configuration一起使用,用于条件注入
为什么我们使用的第三方jar中,指定的类型不存在,第三方jar在编译时仍然通过?还打出了jar包?
下图为spring-boot-autoconfigure
中的一个配置类SecurityDataConfiguration
。为什么SecurityEvaluationContextExtension
不存在,但是spring-boot-autoconfigure
在编译打包时却能成功?
其实这里有个误区,spring-boot-autoconfigure
在编译打包时,SecurityEvaluationContextExtension
是存在的。
spring-boot-autoconfigure
maven中导入了SecurityEvaluationContextExtension
所在jar的坐标,所以可以通过编译。但是在maven中导入这个jar包时指定了<optional>true</optional>
,所以依赖不会传递到我们的工程。我们在自己的项目中看到的就是报错的状态。
为什么在我们的项目中看到SecurityDataConfiguration
类是报错的状态,但是我们的项目却仍然能编译打包成功?
这是另外一个问题。实际上我们使用的并不是SecurityDataConfiguration.java
这个文件;我们的项目中引入spring-boot-autoconfigure
jar包后,使用的是它的.class
字节码文件。所以实际上我们使用的是SecurityDataConfiguration.class
这个文件。我们的项目在编译打包时并不会去再次编译SecurityDataConfiguration.java
这个文件,所以报错不会对我们的项目产生影响。