《Spring实战》摘录 - 6

in #ievolution6 years ago

19-02-14-c0.jpg

51

Q: CGLib是什么
A:

  1. 是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
  2. https://baike.baidu.com/item/cglib/9178356?fr=aladdin

52

Q: 原型作用域prototype的作用
A: 不管你使用哪种方式来声明原型作用域,每次注入或从Spring应用上下文中检索该bean的时候,都会创建新的实例。这样所导致的结果就是每次操作都能得到自己的Notepad实例。

53

P: 3.5.2
Q: SpEL是什么?
A:

  1. Spring 3引入了Spring表达式语言(Spring Expression Language,SpEL)
  2. 能够以一种强大和简洁的方式将值装配到bean属性和构造器参数中
  3. 在这个过程中所使用的表达式会在运行时计算得到值。

54

Q: 在默认情况下,Spring应用上下文中所有bean都是作为以单例(singleton)的形式创建的。
A: 也就是说,不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同一个实例。

55

Q: @Qualifier注解的用法
A:

  1. @Qualifier注解是使用限定符的主要方式。
  2. 它可以与@Autowired@Inject协同使用,在注入的时候指定想要注入进去的是哪个bean。
  3. 例如,我们想要确保要将IceCream注入到setDessert()之中

56

Q: 如何避免自动装配时的歧义性
A: 在声明bean的时候,通过将其中一个可选的bean设置为首选(primary)bean能够避免自动装配时的歧义性。

57

Q: 阻碍Spring自动装配的原因
A: 仅有一个bean匹配所需的结果时,自动装配才是有效的。如果不仅有一个bean能够匹配结果的话,这种歧义性会阻碍Spring自动装配属性、构造器参数或方法参数。

58

Q: 通过ConditionContext,我们可以做到如下几点:
A:

  • 借助getRegistry()返回的BeanDefinitionRegistry检查bean定义;
  • 借助getBeanFactory()返回的ConfigurableListableBeanFactory检查bean是否存在,甚至探查bean的属性;
  • 借助getEnvironment()返回的Environment检查环境变量是否存在以及它的值是什么;
  • 读取并探查getResourceLoader()返回的ResourceLoader所加载的资源;
  • 借助getClassLoader()返回的ClassLoader加载并检查类是否存在。

59

Q: ConditionContext是一个接口,大致如下所示:
A:

public interface ConditionContext { 
    BeanDefinitionRegistry getRegistry(); 
    ConfigurableListableBeanFactory getBeanFactory(); 
    Environment getEnvironment(); 
    ResourceLoader getResourceLoader(); 
    ClassLoader getClassLoader(); 
}

60

Q: 条件化地配置bean
A: 假设有一个名为MagicBean的类,我们希望只有设置了magic环境属性的时候,Spring才会实例化这个类。如果环境中没有这个属性,那么MagicBean将会被忽略。在程序清单3.4所展现的配置中,使用@Conditional注解条件化地配置了MagicBean。

@Bean
@Conditional(MagicExistsCondition.class)   <---  条件化地创建bean
public MagicBean magicBean(){
    return new MagicBean();
}

Coin Marketplace

STEEM 0.14
TRX 0.23
JST 0.031
BTC 83984.44
ETH 2068.83
USDT 1.00
SBD 0.63