Spring实例化bean的三种方法

1.用构造器来实例化

  1. <bean id="hello2" class="com.hsit.hello.impl.ENhello" />

2.使用静态工厂方法实例化

要写一个bean,bean中定义一个静态方法,生成bean,配置factory-method指定静态方法,运行时容器就会自动调用静态方法生成实例

bean

  1. package com.hsit.hello.impl;
  2. import com.hsit.hello.IHello;
  3. public class CHhello implements IHello {
  4. private String msg;
  5. public void sayHello() {
  6. System.out.println("中文" + msg);
  7. }
  8. public String getMsg() {
  9. return msg;
  10. }
  11. public void setMsg(String msg) {
  12. this.msg = msg;
  13. }
  14. @Override
  15. public String toString() {
  16. // TODO Auto-generated method stub
  17. return "Chinese";
  18. }
  19. public static CHhello createInstance() {
  20. System.out.println("jingtai");
  21. return new CHhello();
  22. }
  23. }

配置文件

  1. <bean id="hello1" class="com.hsit.hello.impl.CHhello" factory-method="createInstance" lazy-init="true">
  2. <!-- setter注入 -->
  3. <property name="msg" value="哈哈">
  4. </property>
  5. </bean>

3.使用实例工厂方法实例化

要写两个bean,一个是要实例化的bean,另一个是工厂bean。容器先实例化工厂bean,然后调用工厂bean配置项factory-method中指定的方法,在方法中实例化bean

工厂bean:

  1. package com.hsit.hello.impl;
  2. public class ENhelloFactory {
  3. public ENhello createInstance() {
  4. System.out.println("ENhello工厂");
  5. return new ENhello();
  6. }
  7. public ENhelloFactory() {
  8. System.out.println("chuanjian");
  9. }
  10. }

要实例化的bean:

  1. package com.hsit.hello.impl;
  2. import com.hsit.hello.IHello;
  3. public class ENhello implements IHello {
  4. @Override
  5. public void sayHello() {
  6. // TODO Auto-generated method stub
  7. System.out.println("hello");
  8. }
  9. @Override
  10. public String toString() {
  11. // TODO Auto-generated method stub
  12. return "我是ENhello";
  13. }
  14. }

配置文件

  1. <bean id="eHelloFactory" class="com.hsit.hello.impl.ENhelloFactory" />
  2. <!-- factory-bean填上工厂bean的id,指定工厂bean的工厂方法生成实例,class属性不填 -->
  3. <bean id="example" factory-bean="eHelloFactory" factory-method="createInstance"/>

测试代码

  1. BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
  2. ENhello eNhello = (ENhello) factory.getBean("example");
  3. System.out.println(eNhello.toString());
  4. factory.getBean("hello1");
上一篇:使用spring的事务的三种方法


下一篇:django操作数据库之查询F,Q操作 和 seach搜索功能