Spring 实例化Bean的3种方式

匿名 (未验证) 提交于 2019-12-02 21:45:52

要使用Spring中的Bean,需要先创建这个Bean的实例。

实例化Bean有3种方式:

  • 构造器方式
  • 静态工厂方式
  • 实例工厂方式

构造器方式

构造器方式是最常用的。在Bean中写构造函数,然后在配置文件中传递实参。

1、写一个Bean,用构造器初始化这个Bean

 1 class Student{  2     private String name;  3     private int score;  4   5     //通过构造器初始化对象  6     public Student(String name,int score){  7         this.name=name;  8         this.score=score;  9     } 10  11     public void out(){ 12         System.out.println(name+"的成绩是"+score); 13     } 14 }

2、在Spring配置文件中配置这个Bean,传递实参

1 <bean name="student" class="my_package.Student"> 2         <constructor-arg value="张三" /> 3         <constructor-arg value="90" /> 4     </bean>

3、使用这个Bean

1 public class Test { 2     public static void main(String[] args) { 3         ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); 4         Student student=applicationContext.getBean("student",Student.class); 5         student.out();    6     } 7 }

静态工厂方式

需要创建一个工厂类,在工厂类中写一个静态方法,返回该Bean的一个实例。

示例:

1、写一个Bean,依然需要构造器

 1 class Student{  2     private String name;  3     private int score;  4   5     //构造器  6     public Student(String name,int score){  7         this.name=name;  8         this.score=score;  9     } 10  11     public void out(){ 12         System.out.println(name+"的成绩是"+score); 13     } 14 }

2、写一个工厂类,用静态方法生产该类的实例

1 class Factory{ 2     //是静态方法 3     public static Student createStudent(String name,int age){ 4         return new Student(name,age); 5     } 6 }

一个工厂可以有多个静态方法,生产多个Bean的实例。

3、在xml文件中配置Bean,只需要配置该Bean,不需要配置工厂。

<bean name="student" class="my_package.Factory" factory-method="createStudent">         <constructor-arg value="张三" />         <constructor-arg value="90" />     </bean>

因为是静态方法,直接通过工厂类名调用,所以不需要工厂类的实例,也就不需要在xml文件中配置工厂类。

4、使用该Bea的实例

1 public class Test { 2     public static void main(String[] args) { 3         ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); 4         Student student=applicationContext.getBean("student",Student.class); 5         student.out(); 6     } 7 }

实例工厂方式

工厂中生产该Bean的方法不是静态的,在xml文件中需要同时配置工厂、该Bean。

1、写一个Bean,需要构造器

 1 class Student{  2     private String name;  3     private int score;  4   5     //通过构造器初始化对象  6     public Student(String name,int score){  7         this.name=name;  8         this.score=score;  9     } 10  11     public void out(){ 12         System.out.println(name+"的成绩是"+score); 13     } 14 }

2、写一个工厂类,用实例方法生产Bean

1 class Factory{ 2     //实例方法 3     public Student createStudent(String name,int age){ 4         return new Student(name,age); 5     } 6 }

3、在xml文件中同时配置工厂类、该Bean

  <bean name="factory" class="my_package.Factory" />      <bean name="student" factory-bean="factory" factory-method="createStudent">         <constructor-arg value="张三" />         <constructor-arg value="90" />     </bean>

因为是通过工厂类的实例方法来创建Bean的实例,所以需要先创建工厂类的实例,所以需要在xml中配置工程类。工厂类是一个普通的Bean,配置方式和普通的配置一样。

该Bean是通过实例工厂生产的,需要通过factory-bean指定工厂所在的bean,通过factory-method指定生产该bean的实例方法,这样就确定了这个Bean(类)。

4、使用该Bean的实例

1 public class Test { 2     public static void main(String[] args) { 3         ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); 4         Student student=applicationContext.getBean("student",Student.class); 5         student.out(); 6     } 7 }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!