Spring源码探究(一) Spring-Bean解析

----------------------------------------------------------------------------------------------------------------

--由于最近的学习需要,决定对Spring框架做一个深入的了解,之前的内容暂时搁置--

----------------------------------------------------------------------------------------------------------------

Spring最为瞩目的一大特征就是其作为Bean对象的管理容器,那么我们在这里就尝试着以Bean对象作为切入点,去探寻源码的秘密。作为和Bean最为密切的联系的注解@Autowired一定是我们最为熟悉的注解,搜索源码找到:

/**
 * 将注解打在构造器、属性、setter方法或者config方法上,让其能够通过Spring的依赖注入注入属性。
 * 
 * 有且只有一个构造器可以被注解Autowired修饰,用来指向当该类作为Spring bean对象被创建时的构造方法,这个方法不需要是共有的。
 * 
 * 属性将会在类被构造完毕后,任何config方法运行前注入。属性也不必是共有的。
 * 
 * config方法必须有一个随意的名称和任意多的入参,这些入参将会从Spring容器中取出符合的Bean对象注入。setter方法是一种特殊的config方法。这些方法也不需要是共有的。
 * 
 * 设置required属性将会对方法中所有的入参应用。特别的参数应该考虑使用java-8的Optional类或者使用注解@Nullable来覆盖required的语义。
 * 
 * 对于Collection和Map,将会按照声明的值类型注入bean。因此Map的key值必须是String类型,这决定了他关联的bean对象的名称。可以用Order来修饰注入的顺序,否则就按照它们既有的顺序注入。
 * 
 * 注意,实际的注入操作是通过BeanPostProcessor来完成了,这表明了你不能注入BeanPostProcessor对象和BeanFactoryPostProcessor对象。更多请参考AutowiredAnnotationBeanPostProcessor。
 */
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

	/**
	 * Declares whether the annotated dependency is required.
	 * <p>Defaults to {@code true}.
	 */
	boolean required() default true;

}

猜你喜欢

转载自blog.csdn.net/zkANewer/article/details/88944191