Spring中创建bean的三种方法

1 construction注入

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

<bean id="trade" class="myPackage.Trade">
    <constructor-arg index="0"value="123456" />
    <constructor-arg index="1"ref="account" />
</bean>
<bean id="acccount" class="myPackage.account">
</bean>

2 setter注入

也就是先调用default constructor创建一个对象,然后再调用其setter方法来初始化该对象。

<bean id="trade" class="myPackage.Trade">
    <property name="id"value="123456" />
    <property name="account"ref="account" />
</bean>

3 工厂方法

抽象接口: 

Java代码  


   
   

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实例

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值