首页IT科技什么是spring beans(Spring IOC官方文档学习笔记(二)之Bean概述)

什么是spring beans(Spring IOC官方文档学习笔记(二)之Bean概述)

时间2025-06-15 17:51:28分类IT科技浏览4363
导读:1.Bean概述...

1.Bean概述

(1) Spring IoC容器管理一个或多个bean             ,这些bean是根据我们所提供的配置元数据来创建的                   ,在容器内部       ,BeanDefinition对象就代表了bean的配置元数据             ,它主要包含了如下几个方面的内容:

属性 说明 Class 全限定类名 Name bean的名称 Scope bean的作用域 Constructor arguments 构造函数参数 Properties 成员变量属性值 Autowiring Mode 自动装配模式 Lazy initialization mode 懒加载模式 Initialization Method 初始化回调 Destruction Method 销毁回调

(2) 一般情况下                   ,Spring中的bean来自于Spring的自动扫描解析       ,除此之外      ,Spring还允许我们手动的向容器中注册一些额外的对象                   ,如下所示:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("boke/definition.xml"); //1.获取ApplicationContext中的BeanFactory ConfigurableListableBeanFactory beanFactory = ctx.getBeanFactory(); Man man = new Man(); //2.通过beanFactory的registerSingleton方法向容器中注册容器外的额外对象 beanFactory.registerSingleton("man", man); //3.注册之后,便可获取使用该对象 Man existMan = beanFactory.getBean("man", Man.class); existMan.doSomething();

总结一下             ,向Spring IOC容器中注册额外对象      ,大致可分为两步:

第一步:通过调用ApplicationContext实现类们的getBeanFactory()方法拿到DefaultListableBeanFactory

第二步:调用DefaultListableBeanFactory中的registerSingleton()方法或registerBeanDefinition()来向容器中注册额外对象

注意:在实践上由我们手动注册的bean需要尽早向容器中注册                   ,如果注册的太晚             ,就无法和Spring所提供的一些步骤结合,会导致一些依赖注入失败

2.命名Bean

(1) Spring中的bean通常有一个唯一的id和多个别名                   ,在基于xml的配置中                   ,可通过bean标签中的id属性和name属性来标识一个bean的id和别名,其中id属性必须唯一             ,而name属性可不唯一                   ,多个别名之间用分号       ,逗号或空格分隔开             ,如下所示:

<!-- xml文件内容 --> <beans ...> <!-- 定义了一个bean                   ,它的id为man       ,别名为thisMan      ,yesMan --> <bean class="cn.example.spring.boke.Man" id="man" name="thisMan,yesMan"> </bean> </beans> //Java代码: ApplicationContext ctx = new ClassPathXmlApplicationContext("boke/from.xml"); //打印下面这三个Man对象的地址                   ,发现它们的地址相同             ,为同一对象 Man man = (Man) ctx.getBean("man"), thisMan = (Man) ctx.getBean("thisMan"), yesMan = (Man) ctx.getBean("yesMan");

(2) 在基于Java code的配置中      ,如使用@Bean                   ,@Component等注解时             ,id或name属性不是必须提供的,如果都没有                   ,Spring容器会默认提供一个唯一的id(生成规则:通常情况下会按照驼峰命名法取类名并将其首字母小写                   ,但如果类名的第一,二个字符都是大写时             ,会保留原始大小写)                   ,如下所示

//例子一:定义一个bean       ,未声明它的id或name             ,此时Spring会自动帮我们生成一个唯一的id                   ,为exampleA @Component public class ExampleA { public void doSomething() { System.out.println("Hello This is ExampleA"); } } //从Spring IOC中获取上面这个bean AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("cn.example.spring"); //使用exampleA这个id来寻找容器中ExampleA对象 ExampleA exampleA = (ExampleA) ctx.getBean("exampleA"); exampleA.doSomething(); //例子二:定义了一个bean       ,未声明它的id或name      ,且该类名的第一                   ,二个字符都是大写             ,此时Spring为其生成的id为IMyService      ,与类名相同 @Component public class IMyService { } //验证过程省略...

(3) 还可以使用alias标签来定义一个bean的别名                   ,如下

<beans ...> <bean class="cn.example.spring.boke.ExampleA" id="exampleA"> </bean> <!-- 此时             ,既可以用exampleA来获取到这个bean,也可以用aliasA来获取这个bean                   ,它俩是等价的 --> <alias name="exampleA" alias="aliasA"></alias> </beans>

3.实例化bean

(1) BeanDefinition在本质上就是bean的‘配方表’                   ,容器会根据BeanDefinition中的配置信息来创建出所需要的对象供我们使用,在基于xml的配置中             ,通过bean标签中的class属性来指定要创建对象的类类型                   ,这个bean标签中的class属性对应于BeanDefanition里的Class属性

(2) 通过美元符号($)或点符号(.)来注册静态内部类       ,如下

public class Outer { //注意:这里是‘静态‘内部类 public static class Inner { public void doSomething() { System.out.println("Here is inner"); } } } <!-- xml文件配置 --> <beans ...> <!-- 使用$调用静态内部类 --> <bean class="cn.example.spring.boke.Outer$Inner" id="inner"></bean> <!-- 使用.调用静态内部类             ,与上面的等价 --> <!-- <bean class="cn.example.spring.boke.Outer.Inner" id="inner"></bean> --> </beans> //使用 ApplicationContext ctx = new ClassPathXmlApplicationContext("boke/from.xml"); //获取已注册到容器中的静态内部类 Outer.Inner inner = (Outer.Inner) ctx.getBean("inner"); inner.doSomething();

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
bios密码忘记怎么重置(Bios密码忘记了怎么办 主板CMOS设置的Bios密码清除方法) 人工智能sci期刊推荐(【7】SCI易中期刊推荐——计算机 | 人工智能(中科院4区))