在 Spring 容器中,我们广泛使用的是一个一个的 Bean,那在中,我们可以如何去定义一个Bean?
- 标签
- @Bean注解
- @Component(@Service、@Controller)
还有就是可以通过这个类。
比如,我们可以通过定义一个对象来表示定义了一个Bean:
首先项目中添加 spring-context 依赖,如下:
然后在创建User 类
我们还可以通过设置一个的其他属性
总之,我们通过,,等方式所定义的Bean,最终都会被解析为对象。要理解 ,我们从 的继承关系开始看起:
可以看到 是一个接口,继承自 和 接口。
- AttributeAccessor:定义用于附加和访问元数据的通用协定的接口,可以是任意对象。具体的实现则是 ,采用 进行存储。
- BeanMetadataElement:该接口只有一个方法 getSource,该方法返回 Bean 的来源。
这是 所继承的两个接口。接下来我们来看下 本身:
是一个接口,它有多个实现类,这些实现类分别描述不同类型的 Bean。大致分为两种:
- 抽象实现:
- 子接口:
是一个抽象类, 中只是定义了一系列的 get/set 方法,并没有提供对应的属性,在 中将所有的属性定义出来了。该抽象类下有个三个子类:、、。我们先来看 本身的一些方法与属性。
RootBeanDefinition
这是一个最常用的实现类,Spirng 去创建 Bean 时是基于去创建的!继承了,在的基础上扩展了一些之外的功能,并且是没有的。
实践
复用开篇就用到的 类,不过在其中添加方法。
ChildBeanDefinition
该类继承自 。其相当于一个子类,不可以单独存在,必须依赖一个,构造 时,通过构造方法传入 的名称或通过 设置父名称。它可以从父类继承方法参数、属性值,并可以重写父类的方法,同时也可以增加新的属性或者方法。
从 Spring 2.5 开始,以编程方式注册 Bean 定义的首选方法是 GenericBeanDefinition,GenericBeanDefinition 可以有效替代 ChildBeanDefinition 的绝大分部使用场合。
实践
新建一个 类, 类在 类的基础上增加一个 属性。
GenericBeanDefinition
是从 Spring2.5 以后新加入的 bean 文件配置属性定义类,是一站式服务类。 可以动态设置父 Bean,同时兼具 和 的功能。
实践
该接口可以返回两个元数据的类:
- AnnotationMetadata:主要对 Bean 的注解信息进行操作,如:获取当前 Bean 标注的所有注解、判断是否包含指定注解。
- MethodMetadata:方法的元数据类。提供获取方法名称、此方法所属类的全类名、是否是抽象方法、判断是否是静态方法、判断是否是final方法等。
该接口下有三大子类: 、、
实现了 也继承了 。这个 用来描述标注等注解标记的类会解析为。
它的源码很简单,就是多了一个属性: 用来存储扫描进来的的一些注解信息。
验证
等注解标记的类是否会解析为
新建 类
然后再创建 类
启动
该类继承自 ,并实现了 接口。这个 用来描述标注使用了 注解标记配置类会解析为 。
验证
新建 类
启动
如果使用 作为扫描包, 的实际类型是 ,当然这个与启动有关,后面的博文再说。
它是的一个私有的静态内部类:这个类负责将注解的方法转换为对应的 类,源码就不过多解释了,和之前几个差不多。
其功能特点如下:
- 1、如果 注解没有指定 Bean 的名字,默认会用方法的名字作为Bean的名称。
- 2、标注 注解的类会成为一个工厂类,而标注 注解的方法会成为工厂方法,通过工厂方法实例化 Bean。
验证
在 类中新增方法:
启动
到此这篇javaspringmvc(JAVAspringmvc下载文件到一半显示正在恢复)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jjc/54149.html