继续关于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 () { 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(); } }
得到的结果就是
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(); }
输出结果:
这就是利用有参构造函数去创建的一个对象! 在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中写一个无参构造函数,没有这个构造函数就会报错! 这样的结果就是:
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