1、通过<bean/>标签定义
a:定义一个User类
b:再通过spring.xml声明bean
c: 通过ClassPathXmlApplicationContext加载xml配置文件获取对象,通过该对象获取bean信息。
2、通过@Bean注解定义bean
a:在一个类中用@Bean声明一个Bean。返回的是对象本身。
b:再通过 AnnotationConfigApplicationContext加载配置类获取一个对象,使用该对象获取Bean信息。
3、使用@Component注解定义Bean
a:在一个类上声明@Component
b:直接在另一个类中进行@Resource或@Autowired进行注入。(在springboot下直接使用)
同时也可以使用@ComponentScan注解进行扫描com.example.demo.bean包下的信息,当扫描到带@Component注解,就会把这个类定义为spring的bean。
4、@service、@Controller底层也是使用了@Component注解。
5、通过beanDefination编程式定义
注:有编程式和声明式,beanDefination属于编程式,上面的注解和xml属于声明式。声明式底层也是依赖beanDefination
a:定义一个Person类
b: 定义一个bean实现FactoryBean接口,然后重写两个方法,一个获取对象,一个获取对象的类型。
c:通过applicationContext.registerBeanDefinition方法把bean注入到spring容器中,名字是user,然后通过这个user来获取bean赋值给ZhouyuFactoryBean时报错,说类型不匹配。
这是什么原因呢?
这是FactoryBean 特殊情况,FactoryBean 会定义两个bean,一个是本身的这个GaoyangFactoryBean,还有一个就是,GaoyangFactoryBean里面返回的这个对象Person的bean
获取bean时通过user获取到的bean是person,通过&user才可以获取到GaoyangFactoryBean这个bean
d:也可以使用注解方式实现
7.supplier方式
如下方式,直接通过applicationContext.registerBean(User.class)的方式去注册bean也是可以的,其实这种方式也是beanDefintion的方式,可以点进去看看源码
点进去看源码:其实就是把这个类传进来后,然后生成 beanDefintion
详细可以看看转载的博主,很不错。