读书人

Spring中创办bean的三种方法

发布时间: 2013-02-15 15:46:56 作者: rapoo

Spring中创建bean的三种方法
1 construction注入

也就是直接调用这个类的构造器,并把参数传进去。

1. public interface IMusicBox {

2. public void play();

3. }



3.1 静态工厂方法

工厂类:

Java代码

1. public class MusicBoxFactory {

2. public static IMusicBox createMusicBox(){

3. return new IMusicBox(){

4. public void play(){

5. System.out.println("Play piano...");

6. }

7. };

8. }

9. }


配置文件:

Xml代码

1. <bean id="musicBox" class="test.spring.MusicBoxFactory" factory-method="createMusicBox" />


测试类:

Java代码

1. public static void main(String[] args) {

2. ApplicationContext ctx =

3. new ClassPathXmlApplicationContext("bean-config.xml");

4. IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");

5. musicbox.play();

6. }

3.2工厂实例方法

工厂类:

Java代码

1. public class MusicBoxFactory {

2. public IMusicBox createMusicBox(){//没有static修饰

3. return new IMusicBox(){

4. public void play(){

5. System.out.println("Play piano...");

6. }

7. };

8. }

9. }



配置文件:

Xml代码

1. <bean id="factoryBean" class="test.spring.MusicBoxFactory" />

2. <bean id="musicBox" factory-bean="factoryBean" factory-method="createMusicBox" />


“factory-bean”属性指定工厂Bean,”factory-method”属性指定工厂方法来取得Bean实例。

测试类:

Java代码

1. public static void main(String[] args) {

2. ApplicationContext ctx =

3. new ClassPathXmlApplicationContext("bean-config.xml");

4. IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");

5. musicbox.play();

6. }

3.3工厂类实现FacotryBean接口

工厂类:

Java代码

1. import org.springframework.beans.factory.FactoryBean;

2.

3. public class MusicBoxFactory2 implements FactoryBean {

4. public Object getObject() throws Exception {

5. return new IMusicBox(){

6. public void play(){

7. System.out.println("Play piano...");

8. }

9. };

10. }

11.

12. public Class getObjectType() {

13. return IMusicBox.class;

14. }

15.

16. public boolean isSingleton() {

17. return false;

18. }

19. }



配置文件:

Xml代码

1. <bean id="musicBox" class="test.spring.MusicBoxFactory2"/>



测试类:

Java代码

1. public static void main(String[] args) {

2. ApplicationContext ctx =

3. new ClassPathXmlApplicationContext("bean-config.xml");

4. //不加 & 返回工厂的“产品”

5. IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");

6. musicbox.play();

7. //加 & 返回工厂类实例

8. Object obj = ctx.getBean("&musicBox");

9. System.out.println(obj.getClass().getName());

10.

11. }

实现FactoryBean接口的类不会被视为普通的Bean,Spring会自动检测,调用getObject方法获取Bean实例

读书人网 >编程

热点推荐