Spring学习之Ioc控制反转(2)
开始之前:
1. 本博文为原创,转载请注明出处
2. 作者非计算机科班出身,如有错误,请多指正
---------------------------------------------------------------------------开始啦啦啦啦啦-------------------------------------------------------------------------------
上一篇博文简单的演示了如何用Spring框架创建bean,注入bean,并使用到Java当中运行。本篇会集中介绍bean创建时的一些命名和初始化的规则。
每一个bean都有且仅有一个独有的标识符(identifier),如果这个bean需要不只一个标识符,我们可以用别名(aliases)的方式。
<alias name="fromName" alias="toName"/>
对于xml定义的Ioc容器来说,标识符就是id或者name。如果没有指定id或者name,Spring会自动生成该bean的一个标识符。不过本人还是建议大家初学要指定id或者name,这样在使用依赖的时候出错的概率会小一些。
下面我们来实战一下bean的生成,本篇会演示三种写法(虽然上一篇已经使用过构造器方法,本篇还是会回顾一下)
1. 构造器方法
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="bird" class="com.dabingguozi.ioc2.pojo.ioc2.Bird"> <!-- additional collaborators and configuration for this bean go here --> </bean> <bean name="rabbit" class="com.dabingguozi.ioc2.pojo.ioc2.Rabbit"> <!-- additional collaborators and configuration for this bean go here --> </bean> </beans>
而我们的Java pojo是什么样子的呢?拿rabbit举个例子
public class Rabbit { private Rabbit() { } }
于是我们跑这样一个主程序
public class Application { public static void main(String[] a){ ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"ioc2_animal.xml"}); Bird bird = context.getBean("bird", Bird.class); Rabbit rabbit = context.getBean("rabbit", Rabbit.class); System.out.println(bird.getClass().getName()); System.out.println(rabbit.getClass().getName()); } }
bling~bling~结果就是这样啦~
2. 静态工厂方法
静态工厂提供创建实例的静态方法,所以Java Class就是这样的啦
public class Fish { private static Fish fish = new Fish(); private Fish(){ } public static Fish createInstance(){ return fish; } }
而bean的定义呢,就是这样,其中factory-method映射到class的静态工厂方法,通过这样的初始化定义,id为fish的bean就会被创建
<bean id="fish" class="com.dabingguozi.ioc2.pojo.ioc2.Fish" factory-method="createInstance"/>
亲测也是成功的哟~
3. 实例工厂方法
所谓实例工厂呢,就是这样的一个Java工厂方法,注意这个工厂可不是静态的哦~
public class Zoo { private static Rabbit rabbit= new Rabbit(); private Zoo(){} public Rabbit createRabbitInstance(){ return rabbit; } }
而我们的xml是这样定义的:
<bean name="zoo" class="com.dabingguozi.ioc2.pojo.ioc2.Zoo"> <!-- additional collaborators and configuration for this bean go here --> </bean> <bean id = "rabbit" factory-bean="zoo" factory-method="createRabbitInstance"/>
也就是说,我们先有一个zoo的bean,然后在创建rabbit bean的时候,使用zoo这个bean里面的createRabbitInstance工厂方法作为rabbit bean的创建方法。
跑一下主程序
成功创建rabbit,散花~~~
下一篇:Spring学习之Ioc控制反转(3)(这不是link,戳不开2333)
本篇主要集中讲述bean的创建方法,下一篇将会介绍bean的依赖注入方法,尽请期待,诚谢观看。
本博客内容参考spring framework官方文档,如有冲突,请参照原版内容
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/index.html
Spring学习之Ioc控制反转(2)的更多相关文章
- Spring学习之Ioc控制反转(1)
开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...
- Spring框架之IOC(控制反转)
[TOC] 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向 ...
- Spring框架中IoC(控制反转)的原理(转)
原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...
- Spring源码——IOC控制反转
1.基础知识 Spring有两个核心功能,分别是ioc和aop,其中ioc是控制反转,aop是切面编程. 在ioc中,还有一个名次叫DI,也就是依赖注入.嗯,好像IOC和DI是指同一个,好像又感觉他俩 ...
- Spring第一课:IOC控制反转,什么是反转,什么又是控制?
前言 学习Spring第一课,就是认识IOC控制反转,要了解它还真得花一些功夫.今天主要理解透彻它的真谛,而不仅限于表面. 上道小菜 public class BusinessService { pr ...
- Spring 什么是 IOC 控制反转 ?什么是依赖注入?spring的用处 好处 为什么要用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha Spring是一个开源的控制反转(Inversion of Control ,IoC)和 ...
- 零基础带你看Spring源码——IOC控制反转
本章开始来学习下Spring的源码,看看Spring框架最核心.最常用的功能是怎么实现的. 网上介绍Spring,说源码的文章,大多数都是生搬硬推,都是直接看来的观点换个描述就放出来.这并不能说有问题 ...
- spring学习总结一----控制反转与依赖注入
spring作为java EE中使用最为广泛的框架,它的设计体现了很多设计模式中经典的原则和思想,所以,该框架的各种实现方法非常值得我们去研究,下面先对spring中最为重要的思想之一----控制反转 ...
- Spring学习笔记——01 控制反转
想一下之前学的Java,如果某个类需要引用某个对象,则需要手动new一个出来.这样带来的一个问题就是,若被引用的类发生改动或被删除,则引用它的所有类都会报错.因为两个类耦合在一起了.解决的办法就是不由 ...
随机推荐
- 【HeadFirst 设计模式总结】1.策略模式
1.书中举了一个鸭子类的设计,有些会飞或者会叫,有些不会飞可能也不会叫,用继承则导致不该有的功能通过继承而继承了下来,使用接口则代码无法做到最大程度的重用.进而引出设计原则1:找出应用中可能需要变化之 ...
- SQL判断是否存在符合某条件的记录
IF EXISTS ( --判断是否存在合符条件的记录 ) FROM [DCL].[SecurityUser] WHERE [UserAccount] = @UserAccount ) BEGIN - ...
- achartengine andorid图像引擎入门
最近在帮机械学院开发一个app 用了第三方的图像引擎——achartengine功能还算强大(虽然相比于Html那些第三方图像引擎还是差点不过也够用了) 入门: 参考http://blog.csdn. ...
- GET & POST 登录
GET 登录 @property(nonatomic,assign)long long hasReceivedContentLength; - (void)getLogin { NSString * ...
- iOS 使用NJKWebViewProgress做webview进度条
NJKWebViewProgress地址:https://github.com/ninjinkun/NJKWebViewProgress 导入头文件 #import "NJKWebViewP ...
- Sql Server获得每个表的行数
SELECT o.[name], ddps.[row_count] FROM sys.indexes AS i INNER JOIN sys.objects AS o ON i.[object_id] ...
- ASP.NET MVC学习之路由篇
约束路由 上面我们有一个{id}用来捕获参数的,但是你也发现了它可以捕捉任何字符串等等,但是我们有时需要限制它,比如让它只能输入数字,那么我们就可以使用正则表达式去约束它. 如下修改RouteConf ...
- (原)matlab中使用mex编译多个cpp文件
以前一直是mex一个文件.刚才需要编译多个文件(如a.cpp调用b.cpp的函数,b.cpp调用c.cpp的函数).如果只是mex a.cpp,提示函数找不到函数. 突然想到mex c.cpp b.c ...
- javascript 操作元素属性的方法
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- python核心编程-习题-第二章
PS:PDF在线地址:http://bcmi.sjtu.edu.cn/~zhaohai/ptm2012/data/Python-kernel.programming.v2.pdf 2-1 变量,pr ...