阿里雲大學JavaWeb開發系列課程:Spring框架入門第四講

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>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章