spring创建对象的方式
1. 通过无参构造函数创建对象
pojo类
public class User2 {
private String name;
public User2(){
System.out.println("user2 的无参构造函数");
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User2{" +
"name='" + name + '\'' +
'}';
}
}
xml
测试类
@Test
public void test2(){
//通过无参构造函数创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User2 user = (User2) context.getBean("user2");
System.out.println(user);
}
结果,可以发现,调用了无参构造方法
user2 的无参构造函数
User2{name='cong2'}
2. 通过有参构造函数创建对象
pojo类
public class User3 {
private String name;
public User3(){
System.out.println("user3 的无参构造函数");
}
public User3(String name){
this.name = name;
System.out.println("user3 的有参构造函数");
}
@Override
public String toString() {
return "User3{" +
"name='" + name + '\'' +
'}';
}
}
xml有三种写法
测试类
@Test
public void test3(){
//通过有参构造函数创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User3 user = (User3) context.getBean("user31");
System.out.println(user);
}
结果,可以看到
user3 的有参构造函数
User3{name='cong31'}
结论:在配置文件加载的时候。其中管理的对象都已经初始化了!
扩展,通过工厂创建对象
1、 普通工厂创建对象
使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)实际开发中有时候会用到别人写好的类,这些类有可能是存在于jar包中的,我们是没法修改的
模拟工厂类
public class User2Factory {
public User2 getUser2(){
User2 user2 = new User2();
user2.setName("userByFactory");
return user2;
}
}
xml
测试
//模拟工厂创建对象
@Test
public void test4(){
//通过有参构造函数创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User2 userByFactory = (User2) context.getBean("userByFactory");
System.out.println(userByFactory);
}
2、 静态工厂创建对象
使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
模拟静态工程
public class StaticFactory {
public static User2 getUser2(){
User2 user2 = new User2();
user2.setName("userByFactory");
return user2;
}
}
xml
测试
//模拟静态工厂创建对象
@Test
public void test5(){
//通过有参构造函数创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User2 userByStaticFactory = (User2) context.getBean("userByStaticFactory");
System.out.println(userByStaticFactory);
}