IOC创建对象的方式:
1、通过无参构造方法来创建
User.java
public class User {
private String name;
public User() {
System.out.println("无参构造方法");
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void show(){
System.out.println("name="+ name );
}
}
beans.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.ck.pojo.User">
<property name="name" value="zhangsan"/>
</bean>
</beans>
Test.java
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//在执行getBean的时候, user已经创建好了 , 通过无参构造
User user = context.getBean("user",User.class);
//调用对象的方法 .
user.show();
}
在调用show方法之前,User对象已经通过无参构造初始化了!
2、通过有参构造方法来创建
-
2.1、根据index参数下标设置
-
2.2、根据参数名字设置
-
2.3、根据参数类型设置(不推荐使用,例如类中要是有两个以上同种类型就不好区分)
user.java
public class User {
private String name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void show(){
System.out.println("name="+ name );
}
}
beans.xml
<!-- 第一种根据index参数下标设置 -->
<bean id="user" class="com.ck.pojo.User">
<!-- index指构造方法 , 下标从0开始 -->
<constructor-arg index="0" value="zhangsan"/>
</bean>
<!-- 第二种根据参数名字设置 -->
<bean id="user" class="com.ck.pojo.User">
<!-- name指参数名 -->
<constructor-arg name="name" value="zhangsan"/>
</bean>
<!-- 第三种根据参数类型设置(不推荐使用) -->
<bean id="user" class="com.ck.pojo.User">
<constructor-arg type="java.lang.String" value="zhangsan"/>
</bean>
Test.java
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) context.getBean("userT",User.class);
user.show();
}
在配置文件加载的时候,其中管理的对象都已经初始化了!
3、通过工厂方法来创建对象
3.1、静态工厂
UserFactory.java
public class UserFactory {
public static User newInstance(String name){
return new User(name);
}
}
beans.xml
<bean id="user" class="com.ck.factory.UserFactory" factory-method="newInstance">
<constructor-arg index="0" value="张三"/>
</bean>
3.2、动态工厂
UserDynamicFactory.java
public static class UserDynamicFactory {
public User newInstance(String name){
return new User(name);
}
}
beans.xml
<bean id="user" factory-bean="userFactory" factory-method="newInstance">
<constructor-arg index="0" value="张三"></constructor-arg>
</bean>
<bean id="userFactory" class="com.ck.factory.UserDynamicFactory"/>
注:这种方式使用得更少,因为spring已经提供了工厂类