要使用Spring中的Bean,需要先創建這個Bean的實例。 實例化Bean有3種方式: 構造器方式 靜態工廠方式 實例工廠方式 構造器方式 構造器方式是最常用的。在Bean中寫構造函數,然後在配置文件中傳遞實參。 示例: 1、寫一個Bean,用構造器初始化這個Bean 2、在Spring配置文件 ...
要使用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 }
可以看到控制台輸出了"張三的成績是90"。
靜態工廠方式
需要創建一個工廠類,在工廠類中寫一個靜態方法,返回該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的實例,所以稱為靜態工廠方式。
一個工廠可以有多個靜態方法,生產多個Bean的實例。
3、在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文件中配置工廠類。
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 }
控制台列印出“張三的成績是90”。
實例工廠方式
工廠中生產該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 }