spring IoC-bean的创建方式

提出问题

spring容器可以管理 bean对象的创建,那么是如何创建的 bean对象?

这是本文要研究的问题

默认构造方法

通过默认构造方法(无参构造方法)创建对象

spring容器默认创建对象的方式

修改UserSrvImpl类

增加下面代码:

public UserSrvImpl(){
    System.out.println("UserSrvImpl构造方法");
}
完整代码
public class UserSrvImpl implements IUserService {

    public UserSrvImpl(){
        System.out.println("UserSrvImpl构造方法");
    }
    public void save(String username,String password){
        System.out.println("保存 "+username+","+password+" 成功!");
    }
}

spring.xml

关键代码:

<bean id="UserSrvImpl" class="top.malaoshi.UserSrvImpl">
</bean>

执行

public class Main {
    public static void main(String[] args) {
        ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
        IUserService srv=(IUserService)ac.getBean("UserSrvImpl");
//        IUserService srv=ac.getBean("UserSrvImpl",IUserService.class);
        srv.save("lilei","123456");

    }
}

执行结果:

UserSrvImpl构造方法
保存 lilei,123456 成功!

总结

spring容器默认创建对象的方式:通过默认构造方法(无参构造方法)创建对象

提出问题

修改 UserSrvImpl ,如下:

public class UserSrvImpl implements IUserService {

//    public UserSrvImpl(){
//        System.out.println("UserSrvImpl构造方法");
//    }
    public UserSrvImpl(String name){
        System.out.println("UserSrvImpl有参构造方法");
    }
    public void save(String username,String password){
        System.out.println("保存 "+username+","+password+" 成功!");
    }
}

是否还能运行成功?

报错原因

No default constructor found; nested exception is java.lang.NoSuchMethodException: malaoshi.UserSrvImpl.<init>()

spring容器 默认创建对象 的方式:通过默认构造方法(无参构造方法)创建对象

因为定义了 有参构造方法,那么 java 就不会给类添加 无参构造方法

所以就会报错


原文出处:/show_1IX1fZMMGoY.html