使用IOC来创建对象有三张方式(4种):
1、通过无参的构造方法来创建对象:property:通过setter对应的方法注入
TestIocCreate.java
package spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.ioc.create.User;
public class TestIocCreate {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
User us=(User)ac.getBean("user");
us.show();
}
}
beans.xml
<bean id="user" class="spring.ioc.create.User">
<property name="name" value="mayun"></property>
</bean>
运行:
2、通过有参的构造方法来创建,constructor-arg:通过构造函数注入
a:根据参数的下标来设置,index指构造方法,参数下标从0开始
<bean id="user1" class="spring.ioc.create.User">
<constructor-arg index="0" value="leijun"></constructor-arg>
</bean>
b:根据参数名称来设置
<bean id="user2" class="spring.ioc.create.User">
<constructor-arg name="name" value="leijun"></constructor-arg>
</bean>
c:根据参数类型来设置
<bean id="user3" class="spring.ioc.create.User">
<constructor-arg type="java.lang.String" value="leijun"></constructor-arg>
</bean>
TestIocCreate.java
package spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.ioc.create.User;
public class TestIocCreate {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
User us = (User) ac.getBean("user1");
us.show();
}
}
运行:
3、通过工厂方法来创建(2种)
a、静态工厂
建立一个工厂类:UserFactory.java
package spring.ioc.factory;
import spring.ioc.create.User;
public class UserFactory {
public static User newInstance(String name) {
return new User(name);
}
}
beans.xml
<bean id="user4" class="spring.ioc.factory.UserFactory" factory-method="newInstance">
<constructor-arg index="0" value="jobs"></constructor-arg>
</bean>
TestIocCreate.java
package spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.ioc.create.User;
public class TestIocCreate {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
User us = (User) ac.getBean("user4");
us.show();
}
}
运行:
b、动态工厂
创建一个动态工厂类:
package spring.ioc.factory;
import spring.ioc.create.User;
//动态工厂:把静态工厂的static去掉
public class UserDynamicFactory {
public User newInstance(String name) {
return new User(name);
}
}
beans.xml
<bean id="userFactory" class="spring.ioc.factory.UserDynamicFactory" />
<bean id="user5" factory-bean="userFactory" factory-method="newInstance">
<constructor-arg index="0" value="bill"></constructor-arg>
</bean>
TestIocCreate.java
package spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.ioc.create.User;
public class TestIocCreate {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
User us = (User) ac.getBean("user5");
us.show();
}
}
运行: