logo头像

一路过来,不过游牧自己。。

SSM之Spring(二)


继续关于Spring的话题!下面介绍下ioc创建对象三种方式,直接用代码来讲解!

一、IOC创建对象的三种方式

1、通过无参构造方法来创建

(1)写一个User类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class User {
private String name;

public String getName() {
return name;
}

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

public void getuser() {
// TODO Auto-generated method stub
System.out.println("name="+name);
}

}

里面就一个参数

(2)写配置文件beans.xml

1
2
3
<bean id="user" class="cn.user.User">
<property name="name" value="张三"></property>
</bean>

(3)写Test类

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

import cn.user.User;

public class Test {
public static void main(String[] args) {

ApplicationContext acApplicationContext=new ClassPathXmlApplicationContext("beans.xml");
User us = (User)acApplicationContext.getBean("user");
us.getuser();
}
}

得到的结果就是

1
name=张三

2、通过有参构造方法来构造

(1)在原class中先写一个有参构造函数

1
2
3
4
5

public User(String name) {
super();
this.name = name;
}

(2)然后修改配置文件:

1
2
3
<bean id="user1" class="cn.user.User">
<constructor-arg index="0" value="李四"></constructor-arg>
</bean>

这里就是注意一下id是user1

(3)在Test中去加载

1
2
3
4
5
public static void main(String[] args) {
ApplicationContext acApplicationContext=new ClassPathXmlApplicationContext("beans.xml");
User us = (User)acApplicationContext.getBean("user1");
us.getuser();
}

输出结果:

1
name=李四

这就是利用有参构造函数去创建的一个对象!
在baens.xml文件中他的配置:
1、根据参数下标来设置,index指构造方法参数下标,从0开始
2、根据参数名来设置,例:

1
<constructor-arg name="name" value="李四"></constructor-arg>

3、根据参数类型来设置:

1
<constructor-arg type="java.lang.String" value="李四"></constructor-arg>

3、通过工厂方法来创建对象

1、静态工厂

(1)写一个工厂类

1
2
3
4
5
public class UserFactory {
public static User NewInstance(String name){
return new User(name);
}
}

(2)写一个配置文件

1
2
3
4
<bean id="user2" class="cn.factory.UserFactory" factory-method="NewInstance">
<constructor-arg index="0" value="王五">
</constructor-arg>
</bean>

注意在原来的User中写一个无参构造函数,没有这个构造函数就会报错!
这样的结果就是:

1
name=王五

2、动态工产

(1)写一个类:

1
2
3
4
5
public class UserFactory {
public User NewInstance(String name){
return new User(name);
}
}

(2)写配置文件

1
2
3
4
5
<bean id="userfactory" class="cn.factory.userdynamicFactory" ></bean>
<bean id="user3" factory-bean="userfactory" factory-method="NewInstance">
<constructor-arg index="0" value="王五">
</constructor-arg>
</bean>

由上面的对比,可以看出区别吗?
首先,动态工厂的创建方式类中没有static关键字,
其次看他的加载方式,是由一个bean加载另一bean的方式!

学习之路漫漫长,多走路,多思考!
——————YoungerFary

微信打赏

赞赏是不耍流氓的鼓励