Spring 通过工厂方法(Factory Method)来配置bean
来源:互联网 发布:des算法 vb 编辑:程序博客网 时间:2024/04/28 07:09
在spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean.
在第一种利用bean config file(spring xml)方式中, 还包括如下三小类
反射模式
工厂方法模式(本文重点)
Factory Bean模式
其中反射模式最常见, 我们需要在bean 配置中指明我们需要的bean object的全类名。
例如:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
上面bean 里面的class属性就是全类名, Spring利用Java反射机制创建这个bean。
Factory方法模式
本文介绍的是另1种模式, 在工厂方法模式中, Spring不会直接利用反射机制创建bean对象, 而是会利用反射机制先找到Factory类,然后利用Factory再去生成bean对象。
而Factory Mothod方式也分两种, 分别是静态工厂方法 和 实例工厂方法。
静态工厂方法方式
所谓镜头静态工厂方式就是指Factory类不本身不需要实例化, 这个Factory类中提供了1个静态方法来生成bean对象
下面是例子
bean类Car
首先我们定义1个bean类Car
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
然后我们再定义1个工厂类CarStaticFactory
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
里面定义了1个静态的bean 容器map. 然后提供1个静态方法根据Car 的id 来获取容器里的car对象。
xml配置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
可以见到, 利用静态工厂方法定义的bean item种, class属性不在是bean的全类名, 而是静态工厂的全类名, 而且还需要指定工厂里的
getBean 静态方法名字和参数
客户端代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
输出
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
小结
由上面的例子, 静态工厂方法方式是非常适用于作为1个bean容器(集合的), 只不过吧bean集合定义在工厂类里面而不是bean config file里面。
缺点也比较明显, 把数据写在class里面而不是配置文件中违反了我们程序猿的常识和spring的初衷。当然优点就是令到令人恶心的bean config file更加简洁啦。
实例工厂方法方式
所谓实例工厂方式也很容易看懂, 就是里面的getBean 方法不是静态的, 也就是代表要先实例1个工厂对象, 才能依靠这个工厂对象去获得bean 对象。
用回上面的例子。
而这次我们写1个实例工厂类
CarInstanceFactroy
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
bean xml写法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
因为实例工厂本身要实例化, 所以我们可以在xml中 指定它里面容器的data, 解决了上面提到的静态工厂方法的缺点啦
client代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
输出结果
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
小结
本人觉得实例工厂方式使用起来更加灵活啦, 不过项目中其实本文一开始提到的第三种方法FactoryBean比起工厂方法方式更加常见。
- Spring 通过工厂方法(Factory Method)来配置bean
- Spring 通过工厂方法(Factory Method)来配置bean
- Spring 通过工厂方法(Factory Method)来配置bean
- spring通过工厂方法和FactoryBean来配置Bean
- 二、通过工厂方法来配置bean
- spring 通过工厂方法配置Bean
- Spring-10:通过工厂方法配置Bean
- spring中通过工厂方法配置Bean
- Spring通过工厂方法配置Bean
- Spring中通过工厂方法配置bean
- Spring通过工厂方法配置bean
- Spring通过工厂方法配置bean
- Spring通过factory配置bean
- spring(12) Spring的通过工厂方法配置Bean
- Factory Method 工厂方法
- 工厂方法factory method
- 工厂方法Factory Method
- 工厂方法,Factory Method
- String类及String类常用的方法
- RecyclerView 的点击事件!
- Unity3D黑暗之光项目里面的功能运用--UI框的拖拽
- poj 1743 Musical Theme (后缀数组)
- java:将list写入excel中
- Spring 通过工厂方法(Factory Method)来配置bean
- 104. Maximum Depth of Binary Tree
- 写在2016年的尾巴
- 《索罗斯的行动智慧:人性如狗,要牵着走-雾满拦江》
- URL中文乱码记
- SpringMVC上传文件
- JSP中Forward和Redirect之间的区别
- nginx使用ssl模块配置HTTPS支持
- ubuntu使用中遇到的问题解决方案