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