Spring Ioc--Bean装配
继前一篇IoC概述、Spring容器总结,接下来总结下Bean的装配过程。
要使引用程序中的Spring容器成功启动,需要同时具备以下3个条件:
1、Spring框架的类包,放在应用程序的类路径下。
2、应用程序为Spring提供完备的Bean配置信息。
3、Bean的类,都放到应用程序类路径下。
Spring启动时读取应用程序提供的Bean配信息,并在Spring容器中生成一份相应的Bean配置注册表,然后程序根据这张注册表实例化bean,装配好Bean的额依赖关系,为上层应用提供准备就绪的运行环境。
XML配置
一、Bean基本配置
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<bean id="car" class="com.smart.Car"
init-method="myInit"
destroy-method="myDestory"
p:brand="红旗CA72"
p:maxSpeed="200"
/> </beans>
二、依赖注入
属性注入(灵活性高,常用)
构造函数注入
基于注解的配置
使用注解定义Bean
不管是XML还是注解,它们都是表达Bean定义的载体,其实质都是为Spring容器提供Bean的定义信息。
表现形式上是将XML定义的东西通过注解进行描述。Spring2.0开始引入基于注解的配置方式,在3.1时得到了进一步完善。
通过前面说到,Spring容器启动的三大要件是:Bean定义信息、Bean实现类以及Spring本身。如果采用XML文件的配置,Bean定义信息和类本身是分离的。而采用基于注解的配置方式,Bean定义信息通过在Bean实现类上标注注解实现。
@Compoent:Spring容器自动将POJO转换为容器管理的Bean
以下三个功能和@Compoent等效的注解:
1、@Repository:用于对DAO实现类进行标注
2、@Service:用于对Service实现类进行标注
3、@Controller:用于对Controller实现类进行标注
基于Java类的配置
不经常使用
总结
三种配置方式很难说孰优孰劣,各种不同的方式都有不同的引用场景,建议进一步了解。
XML:1、Bean类类源于第三方类库,如Database、JdbcTemple等,因无法再类中进行注解。
2、命名空间的配置,如aop、context等,只能采用基于XML配置。
注解:Bean的实现类是当前开发的,可以直接在Java类中使用注解。
Java类:基于Java类配置的优势在于可以通过代码方式控制Bean的初始化的整体逻辑。所以如果实例化Bean的逻辑比较复杂,可以使用此方法。
Spring Ioc--Bean装配的更多相关文章
- Spring IoC bean 的创建(上)
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...
- Spring(004)-Bean装配
一,问题,Bean找不到 代码 @Component public class DemoClass { public int doSth() { ; } } 测试代码 @RunWith(SpringJ ...
- Spring IoC bean 的初始化
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...
- 小马哥讲Spring栈核心编程思想 Spring IoC+Bean+Framework
小马哥出手的Spring栈核心编程思想课程,可以说是非常专业和权威的Spring课程.课程主要的方向与核心是Spring Framework总览,带领同学们重新认识重新认识IoC,Spring IoC ...
- Spring IOC容器装配Bean_基于注解配置方式
bean的实例化 1.导入jar包(必不可少的) 2.实例化bean applicationContext.xml(xml的写法) <bean id="userDao" cl ...
- spring 使用@Bean装配Bean
通过@Component装配Bean,但是@Component只能注解在类上,不能注解到方法上.对于Java而言,大部分的开发都需要引入第三方的包(jar文件),而且往往并没有这些包的源码,这时候将无 ...
- 【Spring】Spring的bean装配
前言 bean是Spring最基础最核心的部分,Spring简化代码主要是依赖于bean,下面学习Spring中如何装配bean. 装配bean Spring在装配bean时非常灵活,其提供了三种方式 ...
- Spring对Bean装配详解
1.Spring提供了三种装配bean的方式: 2.自动装配bean: 3.通过Java代码装配bean 4.通过XML装配bean 前言:创建对象的协作关系称为装配,也就是DI(依赖注入)的本质.而 ...
- Spring IoC bean 的加载
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...
- Spring 源码 (1)Spring IOC Bean 创建的整体流程
Spring IOC 中涉及的重要接口 BeanDefinition Bean的描述信息,实现类包括 RootBeanDefinition 和 GenericBeanDefinition,Bean的描 ...
随机推荐
- C# 后台json转换成时间格式
1传入json 字符进行转换 public DateTime ConvertTime(string milliTime) { long timeTri ...
- 浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
本篇文章主要是对jQuery(function(){})与(function(){})(jQuery)之间的区别进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 Jquery是优秀的Javas ...
- Linux下安装与使用本地的perl模块
转自 http://www.cnblogs.com/xianghang123/archive/2012/08/23/2652806.html Linux下安装与使用本地的perl模块 在使用Linux ...
- ubuntu16.04安装重启后显示黑屏
环境 华硕笔记本 ubuntu16.04系统 Nvidia GTX970显卡 问题 装好ubuntu后提示重启,重启后直接黑屏 方法 开机grub界面按e键,linux打头的行,quiet后添加nom ...
- asp.net生产环境和开发环境的错误日志包装策略
对于错误日志的输出,我们借助web.config的两个标志位: <!--全局包装异常处理页面,只有在PageError和Application_Error做清除错误操作才可不跳转--> & ...
- Discuz X1.5 X2.5 X3 UC_KEY Getshell Write PHPCODE into config/config_ucenter.php Via /api/uc.php Vul
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 在Discuz中,uc_key是UC客户端与服务端通信的通信密钥.因此使用uc_k ...
- ansible模块lineinfile
示列: sshd_set.yaml --- - hosts: test remote_user: root gather_facts: False tasks: - name: set hostnam ...
- JDK7的Comparison method violates its general contract异常
1.摘要 前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为了TimSort,之后我们又进 ...
- SQLite遇到的关于x64、x86问题
初次使用SQLite遇到了莫名其妙的问题: 未能加载文件或程序集“System.Data.SQLite, Version=1.0.92.0, Culture=neutral, PublicKeyTok ...
- 一个WPF控件 诡异的MouseEvent 。
背景: private System.Windows.Controls.Border _borderTouch; private bool _mouseDown = false; private S ...