定义Spring Bean 
什么是BeanDefinition?
Bean的类名 
Bean行为配置元素,如作用域、自动绑定的模式、生命周期回调等 
其他Bean引用,又可称作合作者(Collaborators)或者依赖(Dependencies) 
配置设置,比如Bean属性(Properties) 
 
BeanDefinition元信息 
属性(Property)
BeanDefinition构建 
通过BeanDefinitionBuilder 
通过AbstractBeanDefinition以及派生类 
 
通过BeanDefinitionBuilder构建 
1 2 3 4 5 6 7 8 9 BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class); beanDefinitionBuilder         .addPropertyValue("id" , 1 )         .addPropertyValue("name" , "小马哥" ); BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition(); 
通过AbstractBeanDefinition以及派生类构建 
1 2 3 4 5 6 7 8 9 10 11 12 13 GenericBeanDefinition genericBeanDefinition = new  GenericBeanDefinition(); genericBeanDefinition.setBeanClass(User.class); MutablePropertyValues propertyValues = new  MutablePropertyValues(); propertyValues         .add("id" , 1 )         .add("name" , "小马哥" ); genericBeanDefinition.setPropertyValues(propertyValues); 
命令Spring Bean 
Bean 的名称 
每个 Bean 拥有一个或多个标识符(identifiers),这些标识符在 Bean 所在的容器必须是唯一
Bean 名称生成器(BeanNameGenerator) 
由 Spring Framework 2.0.3 引入,框架內建两种实现: 
AnnotationBeanNameGenerator:基于注解扫描的 BeanNameGenerator 实现,起始于 
 
Spring Bean别名 
Bean 别名(Alias)的价值
BeanDefinition 注册 
XML 配置元信息 
Java 注解配置元信息 
Java API 配置元信息 
 
1 2 3 4 5 6 7 8 9 public  static  void  main (String[] args)                BeanFactory beanFactory = new  ClassPathXmlApplicationContext("classpath:/META-INF/bean-definitions-context.xml" );          User user = beanFactory.getBean("user" , User.class);     User xiaomageUser = beanFactory.getBean("xiaomage-user" , User.class);     System.out.println("xiaomage-user 是否与 user Bean 相同:"  + (user == xiaomageUser)); } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public  class  AnnotationBeanDefinitionDemo1      public  static  void  main (String[] args)                    AnnotationConfigApplicationContext applicationContext = new  AnnotationConfigApplicationContext();                  applicationContext.register(Config.class);                  applicationContext.refresh();                  System.out.println("Config 类型的所有 Beans"  + applicationContext.getBeansOfType(Config.class));         System.out.println("User 类型的所有 Beans"  + applicationContext.getBeansOfType(User.class));                  applicationContext.close();     }     public  static  class  Config                             @Bean (name = {"user" , "xiaomage-user" })         public  User user ()               User user = new  User();             user.setId(1L );             user.setName("小马哥" );             return  user;         }     } } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 public  class  AnnotationBeanDefinitionDemo2      public  static  void  main (String[] args)                    AnnotationConfigApplicationContext applicationContext = new  AnnotationConfigApplicationContext();                  applicationContext.register(Config.class);                  applicationContext.refresh();                  System.out.println("Config 类型的所有 Beans"  + applicationContext.getBeansOfType(Config.class));         System.out.println("User 类型的所有 Beans"  + applicationContext.getBeansOfType(User.class));                  applicationContext.close();     }          @Component       public  static  class  Config                             @Bean (name = {"user" , "xiaomage-user" })         public  User user ()               User user = new  User();             user.setId(1L );             user.setName("小马哥" );             return  user;         }     } } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 @Import (AnnotationBeanDefinitionDemo.Config.class)public  class  AnnotationBeanDefinitionDemo3      public  static  void  main (String[] args)                    AnnotationConfigApplicationContext applicationContext = new  AnnotationConfigApplicationContext();                  applicationContext.register(AnnotationBeanDefinitionDemo3.class);                  applicationContext.refresh();                  System.out.println("Config 类型的所有 Beans"  + applicationContext.getBeansOfType(Config.class));         System.out.println("User 类型的所有 Beans"  + applicationContext.getBeansOfType(User.class));                  applicationContext.close();     }          @Component       public  static  class  Config                             @Bean (name = {"user" , "xiaomage-user" })         public  User user ()               User user = new  User();             user.setId(1L );             user.setName("小马哥" );             return  user;         }     } }