要使用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 }