3、使用ioc來創建對象有3種方式
a.通過無參的構造方法來創建對象
User.java
package cn.sxt.vo;
public class User {
//無參的構造方法
public User() {
System.out.println("user的無參構造方法");
}
private String name;
public void setName(String name) {
this.name = 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="cn.sxt.vo.User">
<property name="name" value="張三"></property>
</bean>
</beans>
Test.java
package cn.sxt.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.sxt.vo.User;
public class Test {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
User user=(User)ac.getBean("user");
user.show();
}
}
b.通過有參構造方法來創建對象
User.java
package cn.sxt.vo;
public class User {
public User(String name) {
super();
this.name=name;
System.out.println("user的有參構造方法");
}
private String name;
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("name="+name);
}
}
Bean.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">
<!-- index指構造方法 參數下標從0開始 -->
<bean id="user" class="cn.sxt.vo.User">
<constructor-arg index="0" value="李四"></constructor-arg></bean>
</beans>
第二種根據參數名稱來設置
<?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="cn.sxt.vo.User">
<!-- name指參數名 -->
<constructor-arg name="name" value="噠噠噠"></constructor-arg>
</bean>
</beans>
第三種根據參數類型來設置
<?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="cn.sxt.vo.User">
<constructor-arg type="java.lang.String" value="智能插入"></constructor-arg>
</bean>
</beans>
c.通過工廠方法來創建對象
靜態工廠
UserFactory.java
package cn.sxt.factory;
import cn.sxt.vo.User;
public class UserFactory {
public static User newInstance(String name) {
return new User(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="cn.sxt.factory.UserFactory" factory-method="newInstance">
<constructor-arg index="0" value="汪汪汪"/>
</bean>
</beans>
動態工廠
UserDynamicFactory.java
package cn.sxt.factory;
import cn.sxt.vo.User;
public class UserDynamicFactory {
public User newInstance(String name) {
return new User(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="userFactory" class="cn.sxt.factory.UserDynamicFactory"/>
<bean id="user" factory-bean="userFactory" factory-method="newInstance">
<constructor-arg index="0" value="喵喵喵"/>
</bean>
</beans>