OC创建对象的过程

IOC创建对象的过程

我们可以看到当我们使用了spring时,我们就不用再使用new来创建对象了。那是因为有spring自动帮我们创建对象,IOC是通过构造器创建对象的,因此由于构造器有两种之分 因此创建对象的方式也有两种。

无参构造器创建对象

此时的pojo层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.pojo;

public class User {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public User() {
System.out.println("这里使用的是无参构造器");
}

@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}

此时的xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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">

<!--整合pojo层-->
<!--当使用的是无产构造器时-->
<bean name="user" class="com.pojo.User">
<property name="name" value="dwx"/>
</bean>

</beans>

此时的测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import com.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
public static void main(String[] args) {
//测试spring容器
//转换成更高级的类型
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) context.getBean("user");
System.out.println(user);
}
}

测试结果

1
2
3
这里使用的是无参构造器
User{name='dwx'}

使用有参构造创建对象

有参构造的核心就是在创建时需要传入参数,而在spring中,传参的过程有有三种,因此有参构造创建对象的方法又可以分为三种

通过下标创建对象

<constructor-arg index="" value=""/>

注意:下标是从0开始的

此时的xml

1
2
3
4
5
<!--当使用有产构造时-->
<bean name="user" class="com.pojo.User">
<constructor-arg index="0" value="dwx"/>
</bean>

通过类型来创建对象

<constructor-arg type="" value=""/>

注意:type如果是基本类型用基本类型,如果是引用类型用引用类型的全路径

此时的xml

1
2
3
4
<!--类型传值法-->
<bean name="user" class="com.pojo.User">
<constructor-arg type="java.lang.String" value="dwx"/>
</bean>

注意:这个方法具有局限性,如果一个pojo类中有两个参数的类型相同,这种方法就没有作用了。

通过名字创建对象

<construcuctor-arg name="" value=""/>

此时的xml

1
2
3
4
<!--通过名字传值-->
<bean name="user" class="com.pojo.User">
<constructor-arg name="name" value="dwx"/>
</bean>

很明显,这个方法是最简单的最好用的

当然,使用到复杂类型时也可以先注册在使用ref来使用

有意思

有意思的是,如果一个beans.xml里有多个以及整合好的pojo类

在实例化contest时,其实他们都被实例化了

1
2
3
student的无参构造器
我叫dwx
User{name='dwx'}
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信