Spring的依赖注入——概念
来源:互联网 发布:rsyslog windows 编辑:程序博客网 时间:2024/05/18 03:44
Spring核心容器就是一个大工厂,所有的对象都会被当成Spring核心容器管理的对象——Spring把容器的中一切对象统称为Bean。对于Spring框架而言,一切Java对象都是Bean。`
一个简单的例子
先定义一个简单的类Axe
public class Axe{ public String shop() { return "使用斧头砍柴“; }}
再定义一个简单类Person
public class Person{ private Axe axe; public void setAxe(Axe axe) { this.axe = axe; } pubilc void useAxe() { System.out.println("我打算去砍点柴火"); System.out.println(axe.chop()); }}
Spring通过配置文件来管理Bean,因此为该项目增加XML配置文件
<bean id="person" class="service.Person"> <property name="axe" ref="axe" /></bean><bean id="axe" class="service.Axe">
每个< bean…/>元素默认驱动Spring调用该类无参数构造器创建实例,并将该实例作为Spring容器中的Bean。在Spring配置文件中,class属性值必须是Bean实现类的带包名的完整类名。上面配置文件中还包括一个< property…/>子元素,它通常作为< bean…/>元素的子元素,驱动Spring在底层执行一次setter方法。其中name属性值决定执行哪个setter方法,value或ref属性决定setter方法的传入参数:
- 如果传入参数是基本类型及其包装类、String类等,则使用value属性
- 如果以容器中其它Bean作为传入参数,则使用ref属性
所以,上面配置文件驱动Spring在底层调用无参数构造器依次创建Person和Axe这两个类的对象,并把它们当成容器中的Bean。其中id为person的< bean…/>元素还包括一个< property…/>子元素,因此Spring会在创建完person Bean后,以容器中id为axe的Bean为参数调用person Bean的setAxe()方法,及容器中id为axe的Bean被赋值给person对象的axe实例变量。
下面是本程序的主代码
public class BeanTest{ public static void main(String[] args) throws Exception { //从类加载路径下搜索配置文件,并根据配置文件创建Spring容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); //获取id为person的Bean,即java对象 Person p = ctx.getBean("person",Person.class); //调用useBean()方法 p.useAxe(); }}
Spring容器获取Bean对象主要有以下两种方法:
- Object getBean(String id)
根据容器中Bean的id来获取指定Bean,获取之后需要进行强制类型转换。 - T getBean(String name,Class< T> requiredType)
根据容器中Bean的id来获取指定Bean,但该方法带泛型参数,因此获取后无需进行类型转换。
编译运行该程序,可看到以下输出:
我打算去砍点柴火
使用斧头砍柴
依赖注入
如上面例子所显示,程序代码并没有主动为Person对的的axe成员变量设置值,但执行Person对象的useAxe方法时,可以正常访问axe对象,并调用Axe对象的chop()方法。
纵观所有Java应用,都大量存在A对象需要调用B对象的方法的情况,这种情况在Spring中称为依赖。依赖注入达到的效果:当某个java实例需要其它java实例时,系统自动提供所需要的实例,无需程序显示获取。
- Spring的依赖注入——概念
- Spring依赖注入概念
- Spring依赖注入 — 注入依赖检查
- Spring依赖注入 — 注入依赖检查
- Spring的IOC容器—依赖注入
- Spring——依赖注入
- spring——依赖注入
- 【spring】——依赖注入
- Spring依赖注入 — 构造器注入
- Spring依赖注入 — 构造器注入
- spring 的依赖注入
- Spring的依赖注入
- Spring的依赖注入
- spring的依赖注入
- spring的依赖注入
- spring的依赖注入
- Spring的依赖注入
- Spring的依赖注入
- maven插件tomcat7:run执行时遇到了一个问题
- 流媒体CDN带宽费用计算
- 浮点型的储存方式
- Learning Python 017 — Python2 和 Python3 的内存释放
- WPF自定义控件与样式(2)-自定义按钮FButton
- Spring的依赖注入——概念
- 反转链表
- java基础知识问答-数据类型
- RecyclerView嵌套RecyclerView
- 封装 ,继承, 多态,抽象类 ,接口
- 快速熟悉 PyQt5 与 Eric6 的极速 GUI 开发
- php基础系列----8php中错误和异常的处理
- Activiti基础教程--03(HelloWorld)
- python中多进程+协程的使用以及为什么要用它