Spring 實例化Bean的3種方式

 

要使用Spring中的Bean,須要先建立這個Bean的實例。app

實例化Bean有3種方式:函數

  • 構造器方式
  • 靜態工廠方式
  • 實例工廠方式

 

 

構造器方式

構造器方式是最經常使用的。在Bean中寫構造函數,而後在配置文件中傳遞實參。this

 示例:spa

一、寫一個Bean,用構造器初始化這個Beancode

 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 }

 

 

二、在Spring配置文件中配置這個Bean,傳遞實參xml

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

 

 

三、使用這個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 }

 

 能夠看到控制檯輸出了"張三的成績是90"。blog

 

 

 

 

靜態工廠方式

須要建立一個工廠類,在工廠類中寫一個靜態方法,返回該Bean的一個實例。get

示例:io

一、寫一個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 }

 

 

二、寫一個工廠類,用靜態方法生產該類的實例

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

 由於在工廠中使用的是靜態方法來生產該Bean的實例,因此稱爲靜態工廠方式。

一個工廠能夠有多個靜態方法,生產多個Bean的實例。

 

 

三、在xml文件中配置Bean,只須要配置該Bean,不須要配置工廠。

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

 class指定工廠類,factory-method指定生產該Bean實例的靜態方法是哪一個,這樣就肯定了這個Bean(類)。須要傳參就傳參。

由於是靜態方法,直接經過工廠類名調用,因此不須要工廠類的實例,也就不須要在xml文件中配置工廠類。

 

 

四、使用該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 }

 控制檯打印出「張三的成績是90」。

 

 

 

 

 

實例工廠方式

工廠中生產該Bean的方法不是靜態的,在xml文件中須要同時配置工廠、該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 }

 

 

二、寫一個工廠類,用實例方法生產Bean

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

 

 

三、在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(類)。

 

 

四、使用該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 }
相關文章
相關標籤/搜索