spring提供了三种实例化bean
1.使用类构造器实例化
<bean id="person" class="com.spring.Person"></bean> //利用Person类的无参数构造函数实例化
Person类
package com.spring;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
测试
@Test
public void testPerson(){
// ApplicationContext是接口
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 实例化Spring容器
Person person =(Person)ctx.getBean("person");
person.setAge(15);
person.setName("你是");
System.out.println(person.getAge());
}
打印结果:15
2.使用静态工厂方法实例化bean
创建PersonService
public class PersonService {
public void say(){
System.out.println("this is");
}
}
创建PersonServiceFactory
public class PersonServiceFactory {
//静态工厂方法实例化
public static PersonService createPersonService() {
return new PersonService();
}
}
beans.xml
<bean id="personService" class="com.spring.service.PersonServiceFactory" factory-method="createPersonService"></bean>
factory-method后面是静态方法名称
测试
@Test
public void testFactory(){
// ApplicationContext是接口
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 实例化Spring容器
PersonService personService =(PersonService)ctx.getBean("personService");
personService.say();
}
打印结果:this is
3.使用实例工厂方法实例化
实际就是去掉上面的static
//实例工厂方法实例化
public PersonService createPersonService2() {
return new PersonService();
}
beans.xml
<bean id="personService2" class="com.spring.service.PersonServiceFactory"></bean>
<bean id="personService3" factory-bean="personService2" factory-method="createPersonService2"></bean>
测试
@Test
public void testFactory1(){
// ApplicationContext是接口
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 实例化Spring容器
PersonService personService =(PersonService)ctx.getBean("personService3");
personService.say();
}
同样可以打印出来:this is