【发布时间】:2021-08-10 18:31:20
【问题描述】:
目前正在学习构建 Spring 应用程序。目前我已经相当成功地部署了模拟应用程序,但有一件事让我很烦恼,那就是不了解我们添加到代码中的众多注释背后的机制。听着,我并不是说我不知道他们的目的是什么,他们在哪里行动,我也不是在质疑他们的帮助。
我的观点是,我觉得跳过应该在 XML 文件中进行的更改(或正在进行的更改?)实际上让我觉得在一天结束时我不知道我真正在写什么。让我更具体一些,以便您可以就以下示例回答我。这是来自 Spring 手册。
假设我们有以下配置,将 firstMovieCatalog 定义为主 MovieCatalog
@Configuration
public class MovieConfiguration {
@Bean
@Primary
public MovieCatalog firstMovieCatalog() { ... }
@Bean
public MovieCatalog secondMovieCatalog() { ... }
// ...
}
通过这样的配置,以下 MovieRecommender 将与 firstMovieCatalog。
public class MovieRecommender {
@Autowired
private MovieCatalog movieCatalog;
// ...
}
对应的bean定义如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<bean class="example.SimpleMovieCatalog" primary="true">
<!-- inject any dependencies required by this bean -->
</bean>
<bean class="example.SimpleMovieCatalog">
<!-- inject any dependencies required by this bean -->
</bean>
<bean id="movieRecommender" class="example.MovieRecommender"/>
</beans>
好的,所以,我想如果你能回答我关于这个例子的 2 个问题,就会清楚我在这里缺乏的理解。
-
我不清楚的第一件事:注释过程是与 XML 配置分离的过程,还是以某种隐藏的方式生成这个等效的 XML 配置?
-
这个 XML 配置文件到底在哪里?我通过 Initializr 生成的所有 spring 应用程序都只是生成 pom.xml 文件,它不包含配置。如果我不使用注解,我是否必须在 pom 中手动编写等效配置?
【问题讨论】:
-
XML 配置是旧式的。忽略它。
-
所以注解实际上不会生成 XML,而只会生成 Java 代码本身?
-
是的,没错。
-
注解也不生成代码
-
我相信他们展示 XML 配置和 Java 配置的原因是为了帮助那些理解或仍在使用 XML 配置的人迁移到 Java 配置。 Java config 的一大好处是它提供了编译时类型安全。我个人认为一个或多个
@Configuration文件比一个或多个 XML 配置文件更易于维护。
标签: java spring spring-boot maven