public class LegacySingleton {
private static LegacySingleton instance;
private LegacySingleton() { }
public static LegacySingleton getInstance() {
if(instance == null){ Instance = new LegacySingleton();
} return instance;
}
}
A.从@Bean 方法返回一个 LegacySingleton 的实例, Spring 会自动调用 getInstance()
B.从@Bean 方法中调用 LegacySingleton.getInstance(),并返回实例
C.采用自动布线
D.不可能,构造函数必须是公共的
【正确答案】B【答案解析】注意:本题题干中的“遗留类”指的就是代码中的 LagacySingleton 类,类名中的 Lagacy 的译义中有“遗留”的意思。 A:Spring 能自动调用的方法只有被 Spring 上下文加载的类中的@Bean 方法,以上代码中,LagacySingleton 不是被 Spring 上下文加载的类,所以不可能自动调用; C:自动布线(自动装配)是用于为属性注入值的; D:Spring 是基于反射的,无视访问权限。
已给出下面的 pointcut,下列哪些关于 Spring AOP 的说法是正确的?(选择一项) execution(@com.mycomp.MyCustomAnnotation void *(..))
1. Spring 不支持其 pointcut 表达式语言内部的注解
2. 这将选择代表被@com.mycomp.MyCustomAnnotation 注解的 void 方法的 join point
3. 这将选择代表只位于根包中的类的方法的 join point
4. 这个 pointcut 将永远无法选择任何 join point
A.说法 2 和 3 是正确的
B.说法 2 是正确的
C.都是错误的
D.说法 4 是正确的
E.说法 1 是正确的
【正确答案】B
【答案解析】说法1:about Pointcuts: Spring AOP uses AspectJ’s pointcut expression language, Spring AOP supports a practical subset.说法3:在execution表达式中,如果是 *(..) 格式,可以通配所有包(含各级子包),如果指定了包名,仅用于选择指定的包,并不包含子包,如果指定包名且需要通配子级包,需要在包名处使用 .. 进行通配。
考虑下面的方法签名。 @PutMapping("/accounts/{id}") public void update(...) {...} 以下哪种方法是检索账户 id 的有效方法?(选择一项)
A.public void update(@PathVariable long accountId)
B.public void update(@RequestParam("id") String accountId)
C.public void update(@RequestParam long accountId)
D.public void update(@PathVariable("id") String accountId)
【正确答案】D
【答案解析】题干中的“检索”并不是数据库的检索,只是获取@PutMapping 参数里 id 的值。 如果要获取 URL 中占位符对应的参数值,需要使用@PathVariable 注解,如果设计的方法参数名称与 URL 中占位符名称 不同,则需要配置@PathVariable 注解参数。 对于 Spring 框架而言,只需要值可以填充,可以无视参数类型(Spring 会转换),例如请求中的存在某属性值为 100, 在设计方法参数时,使用 int / long / Integer / Long / String 等都是可以的。 所以,本题的方法参数可以设计为@PathVariable String id,或@PathVariable long id,或 @PathVariable("id") String xxx 等。
以下哪个说法最能定义"aspect"?(选择一项)
A.程序执行中的一个点,如方法调用或字段分配
B.选择一个或多个 join point 的表达式
C.在被 pointcut 选中的 join point 上执行的代码
D.与 pointcut 结合的 advice 的囊括
【正确答案】D
【答案解析】Aspect: A module that encapsulates pointcuts and advice
以下哪个说法最能说明"After Returning" advice 类型?(选择一项)
A.通常用于防止任何由 advice 方法抛出的异常在调用栈中传播
B."After Returning" advice 允许在方法返回后添加行为,即使它抛出了一个异常
C.该 advice 对方法的调用具有完全的控制权,它甚至可以完全阻止方法的调用
D.该 advice 只有在方法成功返回时才会被调用,如果该方法抛出异常则不会被调用
【正确答案】D
【答案解析】A:该 Advice 并不针对异常有特殊的处理; B:该 Advice 仅当方法返回了某个值之后才会执行,如果抛出异常,必然没有返回值; C:不在方法之前执行的 Advice 显然无法阻止方法的调用.
如果你用@Component 来注解一个类,你应该做以下哪项才能让 Spring 自动检测到注解的类并将其加载为 bean?(选择一项)
A.确保为该类指定一个有效的@Scope
B.确保在 Java 配置中指定一个有效的@ComponentScan 注解
C.确保在@Component 注解中指定一个有效的 bean 名称
D.确保为类指定一个有效的@Bean
【正确答案】B
【答案解析】A:@Scope 用于指定作用域; C:Spring 管理 Bean 可以生成默认的名称,不一定需要显式的指定名称; D:@Bean 注解不是用于类的。
当使用 Spring Boot 配置和运行 Web 应用程序时,你应包含哪个依赖项以在开发过程中更改代码时启用应用程序的自动重启?(选择一项)
A.spring-boot-starter-devtools
B.spring-boot-restart
C.spring-boot-devtools
D.spring-boot-initializr
【正确答案】C
要注册一个 bean 销毁回调,可以:(选择一项)
A.配置 bean 实例,以使用"prototype"作用域
B.用@PostDestroy 注解回调方法
C.用@PreDestroy 注解回调方法
D.在 bean 配置中添加@Lazy 注解
【正确答案】C
【答案解析】A:prototype 只确定作用域,与回调无关 B:无此注解 D:@Lazy 只确定“懒加载”,与回调无关
考虑下面的 Java 配置类,声明的 bean 的 id/名称是什么?(选择一项)
@Configuration public class AppConfig{ @Bean public ClientService clientService(){ return new ClientServiceImpl(); } }
A.clientServiceImpl(以小写"c"开头)
B.clientService(以小写"c"开头)
C.ClientServiceImpl(以大写"C"开头)
D.ClientService(以大写"C"开头)
【正确答案】B
【答案解析】默认的 Bean id/name 是@Bean 方法名称,也可通过@Bean 注解的方法
关于以下代码,哪个说法是正确的?(选择一项)(选择一项)
ClientService service = applicationContext.getBean(ClientService.class);
A.这个语法是无效的,因为 getBean()方法调用的结果应该显式地投向 ClientService
B.这个语法是无效的,因为 bean id 必须被指定为方法参数
C.它返回名为"ClientService"的 bean
D.它返回的是一个类型为 ClientService 的 bean(不管它的 id 或名称是什么)
【正确答案】D
【答案解析】以上代码是从 Spring 容器中获取对象的代码,当使用类作为 getBean()参数时,会尝试从 Spring 容器中获取匹配类型 的对象,原题和各选项中没有说明其它前提条件,则视为获取成功,返回匹配类型的对象,对象的 Bean id/name 是默认 名,即将类名的首字母改为小写的名称(如果类/接口名的前 2 个字母均是大写的,则 Bean id/name 与类/接口名完全相 同)。 源码中的方法签名: public T getBean(Class requiredType) throws
你希望应用一个 aspect 来阻止异常在堆栈中传播,并返回一个错误值。你会使用哪种类型的 advice?(选择一项)
A."After Returning"
B."After Throwing"
C."After"
D."Around"
E."Before"
【正确答案】D
【答案解析】After Throwing:only invokes advice if the right exception type is thrown, The @AfterThrowing advice will not stop the exception from propagation, However it can throw a different type of exception. If you wish to stop the exception from propagating any further, you can use an @Around advice.
入门 POM 最恰当的描述是什么?(选择一项)
A.一个特定的 POM,你必须构建它来控制 Boot 的意见运行时
B.一种简单的方法,可以包含多个与特定技术相关的、协调的依赖项,如 web 或 JDBC
C.一种设置,用于指定你希望 Spring Boot 生成的代码
D.一个已有的模型项目,供你下载并作为项目的基础
【正确答案】B
【答案解析】
考虑以下来自 @Configuration 类的代码,并应用 Spring 的默认行为,选择正确答案(选择一项)
@Configuration
public class MyConfig {
@Bean
public AccountRepository accountRepository(){
return new JdbcAccountRepository();
}
@Bean
public TransferService transferService(){
TransferServiceImpl service = new TransferServiceImpl();
service.setAccountRepository(accountRepository()); return service;
}
@Bean
public AccountService accountService(){
return new AccountServiceImpl(accountRepository());
}
}
A.两个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用两次
B.三个 AccountRepository bean 将被实例化,因为 accountRepository()方法将被调用三次
C.一个 AccountRepository bean 将被实例化,因为默认的作用域是 Singleton
D.许多 AccountRepository bean 将被实例化取决于调用 accountRepository(),transferService()和 accountService()的频率
【正确答案】C
【答案解析】C:Spring IoC 的底层是基于代理模式的,即带@Bean 注解的方法是被 Spring 代理的,不会反复创建对象。
考虑下面的配置示例。以下哪个说法是正确的?(选择一项)
@Configuration
public class ApplicationConfig {
@Bean
public RewardNetwork rewardNetwork() {
return new RewardNetworkImpl(accountRepository());
}
@Bean
public AccountRepository accountRepository() {
return new JdbcAccountRepository();
}
}
A.这种配置是正确的
B.这个配置是无效的,因为第一个 bean 应该有一个 id,可以使用@Bean("rewardNetwork")来设置它
C.这个配置是无效的,因为第二个 bean 应该有一个 id,可以使用@Bean("accountRepository")来设置它
D.这个配置是无效的,因为两个 bean 都应该有一个用@Bean 指定的 id
【正确答案】A
【答案解析】Spring 并不要求为每个 Bean 显式的指定 id/name,即使没有显式的指定,Spring 也会自动为 Bean 设置 id/name。
在应用程序的初始化过程中,这些事件将以什么顺序发生?请选择最佳答案。(选择一项)
1. Setter 依赖注入 2. Bean 构造函数 3. 调用 BeanFactoryPostProcessors 4. 调用 BeanPostProcessors
A.2,1,3,4
B.2,1,4,3
C.3,1,2,4
D.3,2,1,4
E.4,2,1,3
【正确答案】D
【答案解析】Configuration Lifecycle: Bean detection (read @Bean method signature / @Component scanning) --> BeanFactoryPostProcessor --> Bean instantiation and dependency injection (call @Bean method implementations / instantiation & @Autowired on constructor & Injection of @Autowired methods and fields) --> BeanPostProcessor
在ApplicationContext中定义使用singleton作用域的两个MyBean类型的bean,id为"myBean"1和"myBean2"。getBean(String id)方法对每个bean被调用一次。关于返回的两个引用,哪个说法是正确的?(选择一项)
A.两个引用指向同一类型的不同实例
B.两个引用指向同一个bean实例
C.当ApplicationContext被初始化时,将抛出RuntimeException
D.其中一个引用将是null
【正确答案】A
【答案解析】
下列关于创建 bean 的说法,哪个说法是正确的(选择一项)
A.当搜索依赖项时,@Autowired 会寻找个名称匹配的 bean。如果不成功,就会退回到基于类型的匹配
B.在创建时间用 Spring 代理替换@Configuration 类,以实现 singleton 作用域
C.当依赖项有两个类型匹配的候选者时,@Autowired 会随机选择一个
D.在@Configuration 类中,@Bean 方法必须不接受任何参数
【正确答案】B
【答案解析】A:@Autowired 的机制是先按类型查找匹配类型的对象的数量,仅当数量>1 时会尝试按名称匹配,其顺序是先类型再名 称; C:不可能随机选择; D:@Bean 方法的参数可以是任何能由 Spring 注入的值,即 Spring 容器中的对象或对象的属性值。
以下哪个说法最能定义"pointcut"?(选择一项)
A.选择一个或多个 join point 的表达式
B.囊括 advice 的模块
C.程序执行中的点,如方法调用或字段分配
D.在每个选定的 join point 执行的代码
【正确答案】A
【答案解析】An expression that selects one or more Join Points
默认情况下, Spring Boot 将自动在以下哪个地方查找属性文件?(选择一项)
A.与 Application 的主@Configuration 类名称相匹配的一个 properties 文件
B.application. properties 或 application.yml,通常位于根 classpath 中
C.config.properties 或 config.yml,通常位于根 classpath 中
D.Spring Boot 不会自动查找任何属性文件,除非特别指示(例如使用@PropertySource)
【正确答案】B
【答案解析】Spring Boot looks for application.properties in these locations (in this order) : "/config" sub-directory of the working directory; The working directory; "config" package in the classpath; classpath root
Spring 将每个 bean 实例放在一个作用域中。默认的作用域是什么?(选择一项)
A.request
B.session
C.prototype
D.singleton
【正确答案】D
【答案解析】Spring 管理对象默认的作用域是单例的,即 singleton。
以下哪些关于 BeanFactoryPostProcessors 的说法是正确的?(选择两项)A.检测@PostConstruct 和@PreDestroy 注解,然后调用适当的行为
B.允许在实例化 Spring bean 之前转换 bean 定义
C.允许在实例化 Spring bean 后转换 bean
D.PropertySourcesPlaceholderConfigurer 是 BeanFactoryPostProcessor 接口的实现,用于读取 Spring Environment 中的属性值
【正确答案】B,D
【答案解析】BeanFactoryPostProcessor --- Can modify the definition of any bean in the factory before any objects are created. --- Applies transformations to bean definitions, before objects are actually created. --- Most Common Example : Recall @Value and ${..} variables, use a PropertySourcesPlaceholderConfigurer to evaluate them, this is a BeanFactoryPostProcessor.
关于@RequestMapping 注解,以下哪些说法是真的?(选择三项)
A.利用 method 属性,它可以替代@GetMapping 或@PutMapping
B.你可以使用它在一个@Controller 注解的类中注解一个方法
C.它是一个将网络请求映射到 Controller 方法的注解
D.不支持 HEAD 方法
E.可用于将 Controller 方法映射到 View
【正确答案】A,B,C
【答案解析】
以下关于@Autowired 注解的哪些说法是正确的?(选择两项)
A.可以使用 Autowired 将多个参数注入到一个方法中
B.默认情况下,如果一个依赖项不能用@Autowired 来满足, Spring 会抛出一个 RuntimeException
C.它不能用来注解字段,只能用来注解构造函数和方法
D.如果在一个类上使用了@Autowired,则会自动对所有的依赖项进行字段注入
【正确答案】A,B
【答案解析】C:不能用于注解字段,错误; D:@Autowired 不是用于类上的。
关于 CommandLineRunner 和 ApplicationRunner,以下哪些说法是正确的?(选择两项)
A.你在 Spring Boot 应用程序中只能有一个 CommandLineRunner 或一个 ApplicationRunner
B.如果你需要 ApplicationArgumentsiString 而不是原始数组你应该实现 ApplicationRunner 而不是 CommandLineRunner
C.不能将依赖项 bean 注入 CommandLineRunner 或 ApplicationRunner 中
D.需要将 CommandLineRunner 或 ApplicationRunner 创建为一个 bean
【正确答案】B,D
【答案解析】--- CommandLineRunner : Offer run() method, handling arguments as an array; --- ApplicationRunner : Offer run() method, handling arguments as ApplicationArguments, a more sophisticated argument handling mechanism.
以下代码显示了一个将用于创建ClientService bean的Java配置类。对该类还需要做哪些工作?(选择两项)
public class AppConfig{ public ClientService clientService(){ return new ClientServiceImpl(); } }
A.该方法应该用@Autowired 进行注解
B.该方法应该用@Bean 进行注解
C.该类应该用@Configuration 进行注解
D.该类应该用@ComponentScan 进行注解
【正确答案】B,C
【答案解析】如果要使得方法的返回对象被 Spring 管理,该方法必须添加@Bean 注解,且该方法所在的类必须被 Spring 上下文加载,例如该类添加@Configuration 作为配置类,或被其它类@import 导入,甚至直接作为创建上下文对象时的参数。
当多个 bean 与依赖项的类型相匹配时,以下是可能的自动布线机制。其中哪个是正确的?(选择两项)
A.只在 setter 方法中使用@Qualifier 注解(@Autowired 对于 setter 是可选的)
B.使用@Qualifier 和@Autowired 注解以及 setter 方法
C.在字段上同时使用@Qualifier 和@Autowired 注解
D.只在字段上使用@Qualifier 注解(@Autowired 对字段是可选的)
【正确答案】B,C
【答案解析】自动布线:Autowired,即自动装配。 本题考察如果有多个类型相同的 Bean 时,如何实现自动装配。 除了构造方法以外,无论是通过 Setter 还是字段注入,都必须使用@Autowired 注解,当存在多个类型相同的 Bean 时, 还必须配合@Qualifier 一起使用,即在同一处同时使用这 2 个注解
JdbcTemplate 执行哪些操作:(选择三项)
A.获得连接 B.执行语句 C.定义数据源 D.生成 SQL 语句 E.解除连接
【正确答案】A,B,E
【答案解析】Spring handle : Acquisition of the connection; participation in the transaction; execution of the statement; processing of the result set; handling exceptions; release of the connection.
下图显示了一个创建 JdbcTemplate bean 的条件式@Bean 方法
@Bean
@ConditionalOnBean(name = "dataSource")
public JdbcTemplate jdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
以下哪些说法正确地描述了下面的代码?(选择两项)
A.该代码存在语法错误
B.当已经创建了一个名为"dataSource"的 bean 时,将创一个 JdbcTemplate bean
C.应将@ConditionalOnBean(name = "dataSource")替换为@ConditionalOnBean(DataSource.class).以提高灵活性
D.当 DataSource 类在 classpath 中,但不存在 DataSource bean 时,将创建一个 JdbcTemplate bean
【正确答案】B,C
【答案解析】@ConditionalOnBean 的作用:仅当注解参数的 Bean 存在时,才会执行当前@Bean 方法。
关于构造函数注入,以下哪些说法是正确的?(选择两项)
A.使用构造函数注入可以实现不变性
B.如果只有一个构造函数,则不需要使用@Autowired 注解
C.在一个目标 bean 中,构造函数注入和字段注入不能同时使用
D.从测试的角度看,字段注入优于构造函数注入
【正确答案】A,B
【答案解析】A:不变性:Spring 不提倡使用字段注入(即声明依赖项属性并添加@Autowired),因为存在 NPE 的风险,主要表现为 在执行单元测试时(单元测试:无任何其它环境,包括 Spring 环境,如果测试时加载 Spring 或其它环境,则称之为集成 测试,甚至可能是系统测试),如果没有对依赖项属性赋值,则会因为依赖项属性值没有值而导致 NPE,所以 Spring 鼓励 使用构造方法注入,当使用构造方法注入时,不需要 Setter,对于类的外部而言,则没有了修改依赖项属性值的入口,从 而达成“不变性”,同时,也消除了 NPE 风险,除非你显式的传递一个 null 到构造方法的调用中。 B:Spring 会自动调用无参数构造方法(如果存在)来创建对象;如果缺失无参数构造方法,当仅 1 个构造方法时, Spring 也会自动调用;当存在多个构造方法时,Spring 仍会自动尝试调用无参数构造方法(如果存在),如果需要 Spring 调用特定的构造方法,需要在指定的构造方法上添加@Autowired 注解; C:错误,可以同时使用构造方法、Setter 方法和字段注入; D:同 A 的解析,使用字段注入存在 NPE 风险。
关于 Spring AOP,以下哪些说法是正确的?(选择两项)
A.横切关注点的例子包括安全、缓存、事务
B.Spring AOP 不使用 AspectJ 的 pointcut 表达式语言
C.无论方法是否成功返回或抛出异常,都会调用"After"advice 类型
D.在 Spring AOP 中,一个 join point 代表一个方法执行或属性访问
【正确答案】A,C
【答案解析】A:Cross-Cutting Concerns:Logging and Tracing, Transaction Management, Security, Caching, Error Handling, Performance Monitoring, Custom Business Rules. C:Called regardless of whether an exception has been thrown by the target or not.
当在一个类上使用@SpringBootApplication 时,以下哪些说法是正确的?(选择两项)
A.它使 Spring Boot 启用自动配置
B.由于该类不是一个@Configuration 类,所以在该类中不能有@Bean 方法
C.它使 Spring 从该类的包开始执行组件扫描
D.它使 Spring Boot 构建一个可执行的 JAR 应用程序
【正确答案】A,C
【答案解析】
关于 Spring Boot,以下哪些说法是正确的?(选择两项)
A.Spring Boot 会生成你的应用程序所需的所有应用程序级别的配置文件
B.Spring Boot 允许不同的打包选项,例如将 Tomcat 打包为应用程序 JAR 文件中的嵌入式容器
C.Spring Boot 是一个苛刻的运行时,它要求遵守规定的方法,不能有任何偏差
D.Spring Boot 试图让开发者摆脱最可预测的低级设置
【正确答案】B,D
【答案解析】
以下哪项注入了"daily.limit"系统属性的值?(选择两项)
A.@Value("#{systemProperties.daily.limit}")
B.@Value("${daily.limit}")
C.@Value("#{daily. limit}")
D.@Value("#{systemProperties['daily.limit']}")
【正确答案】B,D
【答案解析】
关于基于 Spring Boot 的 Spring MVC 应用程序,以下哪些说法是正确的?(选择两项)
A.Jetty 是默认的嵌入式 Web 服务器
B.Spring Boot 默认启动嵌入式 Web 服务器
C.你可以在运行时让两台嵌入式服务器共享同一个端口
D.你可以用你选择的服务器替换默认的嵌入式 Web 服务器
【正确答案】B,D
【答案解析】
关于 Spring Boot 自动配置的自定义,以下哪些说法是正确的?(选择两项)
A.你可以通过将自动配置类子类化,明确地禁用一些自动配置
B.你可以通过在 application. properties 文件中设置一个属性或使用@EnableAutoConfiguration 注解上的 exclude 属性来明确地禁用一些自动配置
C.如果某些自动配置不适合你的需要,你可以明确地禁用它
D.你只能禁用所有的自动配置。即,你不能只禁用部分自动配置
【正确答案】B,C
【答案解析】AutoConfiguration can be controlled by : properties; explicit bean definition; disabling of auto configuration; altering dependency versions.
以下哪些说法描述了 JdbcTemplate 的特性?(选择两项)
A.它提供了一种处理结果集的回调方法
B.开发者仍然负责从/到连接池获取和释放一个连接
C.它可以抛出 checked exceptions
D.它将根原因 checked exceptions 翻译成 Spring 的 DataAccessException 类型
【正确答案】A,D
【答案解析】
给定一个 ApplicationContext 包含三个类型为"Foo"的 bean 定义,其 bean id 分别为 foo1、foo2 和 foo3,以下哪些@Autowired 方案是有效的,并允许 ApplicationContext 成功初始化?(选择三项)
A.@Autowired @Qualifier("foo3") Foo foo;
B.@Autowired public void setFoo(@Qualifier("foo1") Foo foo) {...}
C.@Autowired public void setFoo(Foo foo) {...}
D.@Autowired private Foo foo2;
E.@Autowired private Foo foo;
【正确答案】A,B,D
【答案解析】由于存在 3 个类型相同的 Spring Bean,在自动装配时,必须保证 Spring 框架知晓装配哪一个,选项 AB 使用了 @Qualifier 注解并显式的指定 Bean id,是正确的,选项 D 通过属性名匹配了其中 1 个 Bean id,也是可行的,而选项 C 和选项 E 都没有指定有效的 Bean id,按类型又无法装配,这样的代码会导致初始化 Spring 环境时的运行时错误。
关于 application.properties或application.yml文件,以下哪些说法是正确的?(选择两项)
A.你只能用它定义 Spring Boot 属性,你必须将你的属性放在不同的文件中
B.如果它们位于当前目录的"/config"子目录下, Spring Boot 会找到它们
C.即使在环境中或使用命令行参数定义属性,application. properties 或 application.yml 中的属性总是覆盖其他的属性
D.在特别的属性文件中定义的属性,如 application-production.properties 或 application-production.yml,将覆盖在application. properties 或 application.yml 文件中定义的属性
【正确答案】B,D
【答案解析】Spring Boot looks for application.properties in these locations (in this order) :"/config" sub-directory of the working directory; The working directory; "config" package in the classpath; classpath root.
下图显示了在"meta-INF/spring.factories"文件中指定的自动配置类
@Configuration
@ConditionalOnClass(HelloService.class)
public class HelloAutoConfig{
@ConditionalOnMissingBean(HelloService.class)
@Bean
HelloService helloService(){
return new TypicalHelloService();
}
以下哪些说法是正确的?(选择两项)
A.只有当 ApplicationContext 中没有其他 HelloService bean 时,才会从 helloService()方法中创建一个新的 HelloService bean
B.只有当 HelloService.class 在 classpath 中时,才会使用这个自动配置类
C.从 helloService()方法中将创建一个新的 HelloService bean,如果 ApplicationContext 中已有一个 HelloService bean,它将替换现有的 HelloService bean
D.即使 HelloService.class 不在 classpath 中,也会从 helloService()方法中创建一个新的 HelloService bean
【正确答案】A,B
【答案解析】--- @ConditionalOnClass:是 Spring Boot 实现自动配置的重要支撑之一。其用途是判断当前 classpath 下是否 存在指定类,若是则将当前的配置装载入 spring 容器; --- @ConditionalOnMissingBean:在容器加载它作用的 bean 时,检查容器中是否存在目标类型 (ConditionalOnMissingBean 注解的 value 值)的 bean 了,如果存在跳过原始 bean 的 BeanDefinition 加载动 作
以下哪些说法描述了 Spring 的 JdbcTemplate?(选择两项)
A.JdbcTemplate 提供了处理结果集的能力
B.所有的 JdbcTemplate 方法都会抛出你需要处理的 SQLExceptions
C.JdbcTemplate 提供了查询执行的方法
D.JdbcTemplate 为你生成 SQL 语句
【正确答案】A,C
【答案解析】
关于 pointcut 表达式,以下哪些说法是正确的?(选择两项)
A.pointcut 表达式的方法名不能有通配符
B.pointcut 表达式可以包括以下运算符:&&(and)、ll(or)、!(not)
C.pointcut 表达式可以用来选择已被特定注解的 join point
D.pointcut 表达式不能指定参数的类型
【正确答案】B,C
【答案解析】
关于下面的 pointcut 表达式,下列哪些说法是正确的:(选择两项)
execution(@javax.annotation.security.RolesAllowed * rewards.restaurant.*.*(..))
A.类名可以被任意命名
B.目标方法可以有零个或多个参数
C.所有的方法参数都应该用@RolesAllowed 来注解
D.目标方法的返回类型是 RolesAllowed
【正确答案】A,B
【答案解析】A:表达式中倒数第 2 个星号即是通配类名的,则类名可以是任意名称; B:表达式末尾的括号中的 2 个小数点即是通配方法参数的,则方法的数量可以是 0~N 个; C / D:表达式中的@RolesAllowed 注解表示匹配的方法必须添加了该注解,而不是参数或返回值。
以下哪项注解将一个类标记为组件扫描器的 Spring bean?(选择四项)
A.@Autowired
B.@Configuration
C.@Service
D.@Controller
E.@Aspect
F.@Component
【正确答案】B,C,D,F
【答案解析】A:@Autowired 是用于属性、Setter、构造方法的,并不用于类;E:@Aspect 只表示类是一个“切面类”,需结合@Component 或其它组件注解才可以被 Spring 扫描。
哪些说法表明使用 Spring 的依赖注入的潜在优势:(选择三项)
A.应用组件之间的依赖项可以在组件本身的外部进行管理
B.配置可以外部化并集中在一小组文件中
C.测试变得更容易,因为在单元测试时,可以很容易地将 mock dependency 对象注入到依赖对象中
D.依赖注入帮助 IDE 生成一些代码
E.依赖注入可以减少应用程序的启动时间
【正确答案】A,B,C
【答案解析】D:Spring 并不能作用于 IDE; E:应用程序的启动时间与依赖注入机制没有关系,一定程度上来说,由于 Spring 默认以饿汉式管理 Bean,由于有了依赖 注入,启动时间反而更久一些
关于基于 Spring Boot 的 Web 应用程序的"fat"jar,以下哪些说法是正确的?(选择两项)
A."fat"jar 必须是 JAR 文件,不能是 WAR 文件
B."fat"jar 可以包含多个嵌入式服务器
C."fat"jar 会被 Spring Boot Maven 插件或 Gradle 插件构建起来
D."fat"jar 可以在容器和云平台上轻松部署
【正确答案】C,D
【答案解析】
关于@EnableAutoConfiguration 注解,以下哪些说法是正确的?(选择两项)
A.如果没有 application. properties 或 application.yml 文件,就不能使用它
B.它是由@SpringBootConfiguration 合成的注解的元注解
C.它是由@SpringBootApplication 合成的注解的元注解
D.它使 Spring Boot 自动创建它认为应用程序需要的 bean
【正确答案】C,D
【答案解析】
图片显示的是一个 Java 配置类。哪些说法是正确的?(选择两项)
@Configuration
public class AppConfig {
@Bean
public ClientService clientService() {
ClientServiceImpl clientService = new ClientServiceImpl();
clientService.addClientDao(new ClientDao());
return clientService;
}
}
A.该 bean 不能使用以"add"开头的方法来注入依赖项
B.这个 Java 配置可以通过使用@Profile 注解来指定配置文件
C.该 bean 的类型为 ClientService
D.声明的 bean 默认是一个 prototype
【正确答案】B,C
【答案解析】A:对名称没有要求; D:只要没有显式的指定作用域,默认的就是 singleton。
JdbcTemplate 可以用来查询哪些类型的对象?(选择三项)
A.Domain Objects
B.简单类型(int、long、 String 等)
C.JSONObject
D.Generic Maps
【正确答案】A,B,D
【答案解析】
关于 Spring Boot 自动配置,以下哪些说法是正确的?(选择两项)
A.当缺少 bean 时,可能会发生自动配置。但当存在 bean 时,不会发生自动配置
B.自动配置是通过处理 Spring Boot 提供的自动配置类列表来执行的,每个自动配置类都使用不同的条件集
C.只有在应用级配置完成后,才会出现自动配置的情况
D.自动配置发生在应用级配置之前和之后
【正确答案】B,C
【答案解析】Auto-configuration classes processed after explicitly created beans are defined.
关于 advice 类型和异常处理,以下哪些说法是正确的?(选择两项)
A."After Returning" advice 类型可以吞没或阻止目标方法抛出的异常的传播
B.如果"Before" advice 方法抛出异常,则不会调用目标方法
C."Around"advice 类型可以吞没或阻止目标方法抛出的异常的传播
【正确答案】B,C
【答案解析】A:After Returning -- 先执行目标方法,当成功返回某个值后才会触发; B:Before -- 在目标方法之前触发; C:Around -- 在目标方法之前触发,且在触发后自行调用目标方法,则调用时可处理异常。



