Spring框架创建Bean的多种方式详解
170 浏览量
更新于2024-09-02
收藏 166KB PDF 举报
实验1和实验2展示了Spring框架中两种不同的Bean创建方法。在Spring中,Bean的创建和管理是核心功能,它使得我们可以将关注点从对象的创建和依赖管理中解脱出来,专注于业务逻辑。
实验1 - 根据Bean的类型从IOC容器中获取实例
在Spring中,`ApplicationContext`或`BeanFactory`接口提供了`getBean(Class<T> requiredType)`方法,允许我们根据Bean的类型来获取实例。这在我们不确定Bean的ID但知道其类型时非常有用。然而,当容器中有多个相同类型的Bean时,这种方法会抛出异常,因为它无法确定返回哪一个。为了避免这种情况,可以使用`getBean(String beanName, Class<T> requiredType)`方法,明确指定Bean的ID。
实验2 - 通过有参构造器为Bean的属性赋值
Spring支持通过构造函数注入来初始化Bean的属性。这可以通过在XML配置文件中使用`<constructor-arg>`标签来实现,指定构造函数参数的名称(如果有)和值。例如,如果`Persion`类有一个带两个参数(名字和年龄)的构造器,我们可以在XML配置中定义如上所示的`p2` Bean。这样,Spring会在创建Bean时调用对应的构造器并传递给定的值。
除了上述方法,Spring还提供了多种创建和管理Bean的方式:
1. **无参构造器创建**:这是最基础的方式,Spring通过Bean的无参构造器创建实例,然后通过setter方法设置属性值。如最初的示例中,`p1` Bean的创建就是这种方式。
2. **工厂方法创建**:可以通过指定一个静态工厂方法来创建Bean,Spring调用该方法来获取Bean实例。在XML配置中,使用`factory-bean`和`factory-method`属性来指定工厂Bean和工厂方法。
3. **实例工厂方法创建**:类似于静态工厂方法,但工厂是一个实例Bean,Spring首先创建工厂Bean,然后调用其指定的方法来创建目标Bean。
4. **注解配置**:使用`@Component`、`@Service`、`@Repository`和`@Controller`等注解标记类为Bean,Spring扫描这些注解并自动管理Bean。属性注入可以通过`@Autowired`、`@Value`等注解完成。
5. **Java配置**:使用`@Configuration`类和`@Bean`方法来替代XML配置,提供更灵活的配置方式。`@Bean`方法类似XML中的`<bean>`标签,用于定义Bean。
6. **原型(Prototype)作用域**:默认情况下,Spring的Bean是单例的。如果希望每次请求都创建一个新的Bean实例,可以将其配置为原型作用域。
7. **范围(Scope)**:Spring还支持其他作用域,如`session`、`request`等,它们主要用于Web应用中。
8. **属性注入**:Spring支持通过`@Value`注解注入属性值,也可以通过`@Qualifier`来指定注入哪个特定的Bean。
9. **AOP代理**:Spring提供面向切面编程(AOP)功能,可以为Bean创建代理来实现横切关注点,如事务管理、日志记录等。
10. **装配(Wiring)**:通过`@Autowired`和`@Qualifier`注解,Spring可以自动装配Bean之间的依赖关系,也可以通过XML配置来手动装配。
理解并熟练掌握这些创建和管理Bean的方法,对于深入理解和使用Spring框架至关重要。通过灵活运用这些技术,可以构建出松耦合、可维护性高的应用程序。
2017-03-10 上传
2021-03-04 上传
点击了解资源详情
769 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38737980
- 粉丝: 8
- 资源: 964
最新资源
- 俄罗斯RTSD数据集实现交通标志实时检测
- 易语言开发的文件批量改名工具使用Ex_Dui美化界面
- 爱心援助动态网页教程:前端开发实战指南
- 复旦微电子数字电路课件4章同步时序电路详解
- Dylan Manley的编程投资组合登录页面设计介绍
- Python实现H3K4me3与H3K27ac表观遗传标记域长度分析
- 易语言开源播放器项目:简易界面与强大的音频支持
- 介绍rxtx2.2全系统环境下的Java版本使用
- ZStack-CC2530 半开源协议栈使用与安装指南
- 易语言实现的八斗平台与淘宝评论采集软件开发
- Christiano响应式网站项目设计与技术特点
- QT图形框架中QGraphicRectItem的插入与缩放技术
- 组合逻辑电路深入解析与习题教程
- Vue+ECharts实现中国地图3D展示与交互功能
- MiSTer_MAME_SCRIPTS:自动下载MAME与HBMAME脚本指南
- 前端技术精髓:构建响应式盆栽展示网站