2、【单选题】
关于以下代码,哪个说法是正确的?(选择一项)(选择一项)
ClientService service = applicationContext.getBean(ClientService.class);
A.这个语法是无效的,因为 getBean()方法调用的结果应该显式地投向 ClientService
B.这个语法是无效的,因为 bean id 必须被指定为方法参数
C.它返回名为"ClientService"的 bean
D.它返回的是一个类型为 ClientService 的 bean(不管它的 id 或名称是什么)
【正确答案】D
【答题时间】2022-01-09 03:51:51
【答案解析】以上代码是从 Spring 容器中获取对象的代码,当使用类作为 getBean()参数时,会尝试从 Spring 容器中获取匹配类型 的对象,原题和各选项中没有说明其它前提条件,则视为获取成功,返回匹配类型的对象,对象的 Bean id/name 是默认 名,即将类名的首字母改为小写的名称(如果类/接口名的前 2 个字母均是大写的,则 Bean id/name 与类/接口名完全相 同)。 源码中的方法签名: public T getBean(Class requiredType) throws
3、【单选题】
使用下面的图片,考虑遗留类。如何从这个遗留类创建 Spring bean?(选择一项)
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
【答题时间】2022-01-09 03:51:51
【答案解析】注意:本题题干中的“遗留类”指的就是代码中的 LagacySingleton 类,类名中的 Lagacy 的译义中有“遗留”的意思。 A:Spring 能自动调用的方法只有被 Spring 上下文加载的类中的@Bean 方法,以上代码中,LagacySingleton 不是被 Spring 上下文加载的类,所以不可能自动调用; C:自动布线(自动装配)是用于为属性注入值的; D:Spring 是基于反射的,无视访问权限。
8、【单选题】
已给出下面的 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
【答题时间】2022-01-09 03:51:51
【答案解析】说法1:About Pointcuts: Spring AOP uses AspectJ’s pointcut expression language, Spring AOP supports a practical subset.说法3:在execution表达式中,如果是 *(..) 格式,可以通配所有包(含各级子包),如果指定了包名,仅用于选择指定的包,并不包含子包,如果指定包名且需要通配子级包,需要在包名处使用 .. 进行通配。
10、【单选题】
考虑下面的配置示例。以下哪个说法是正确的?(选择一项)
@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
【答题时间】2022-01-09 03:51:51
【答案解析】Spring 并不要求为每个 Bean 显式的指定 id/name,即使没有显式的指定,Spring 也会自动为 Bean 设置 id/name。
12、【单选题】
如果你用@Component 来注解一个类,你应该做以下哪项才能让 Spring 自动检测到注解的类并将其加载为 bean?(选择一项)
A.确保为该类指定一个有效的@Scope
B.确保在 Java 配置中指定一个有效的@ComponentScan 注解
C.确保在@Component 注解中指定一个有效的 bean 名称
D.确保为类指定一个有效的@Bean
【正确答案】B
【答题时间】2022-01-09 03:51:51
【答案解析】A:@Scope 用于指定作用域; C:Spring 管理 Bean 可以生成默认的名称,不一定需要显式的指定名称ÿ