IOC创建对象的方式
通过无参构造创建
-
编写实体类
public class User { private String name; public User() { System.out.println("User的无参构造"); } public void show(){ System.out.println("你好:" + this.name); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
编写applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="user" class="com.jh.domain.User"> <property name="name" value="Spring"/> </bean> </beans>
-
测试
@Test public void test01() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //在执行getBean之前, User对象就已经被Spring容器通过无参构造创建了 User user = (User) context.getBean("user"); user.show(); }
通过有参构造创建
-
编写实体类
public class User { private String name; public User(String name) { System.out.println("User的带参构造"); } public void show(){ System.out.println("你好:" + this.name); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
编写applicationContext.xml文件
通过构造器注入参数有三种方式
-
通过index参数下标注入
<bean id="user" class="com.jh.domain.User"> <!-- index指构造方法 , 下标从0开始 --> <constructor-arg index="0" value="姓名"/> </bean>
-
通过参数类型注入,不推荐!
<bean id="user" class="com.jh.domain.User"> <constructor-arg type="java.lang.String" value="姓名"/> </bean>
-
通过参数名注入
<bean id="user" class="com.jh.domain.User"> <!-- name指参数名 --> <constructor-arg name="name" value="姓名"/> </bean>
-
-
测试
@Test public void test01() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); }
我们发现,即使没通过getBean获取容器的对象,User也被创建了。
总结:在配置文件加载的时候。其中管理的对象都已经初始化了!
懂不懂,都是收获