提出问题
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 就不会给类添加 无参构造方法
所以就会报错