Spring之HELLO WORLD
Ioc和DI介紹
HELLO WORLD程式
getBean方法的三種簽名
解決方案:
專案檔案:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd" >
<bean id="helloworld" class="helloworld.helloworld">
<property
</bean>
<bean id="helloworld1" class="helloworld.helloworld">
<property name="username" value="蘇洲"></property>
</bean>
<bean id="helloworld2" class="helloworld.helloworld">
<property name="username" value=
</bean>
</beans>
helloworld類
package helloworld;
public class helloworld {
private String username;
public helloworld(){
System.out.println("所謂的焦慮就是書讀的太少,而想得又特別多");
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void sayhello(){
System.out.println("世界你好,我的名字是"+username);
}
}
test測試類
package helloworld;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
public class test {
@Test
public void testputong(){
helloworld world=new helloworld();
world.setUsername("洲洲");
world.sayhello();
}
@Test
public void testspringIoc(){
//從Classpath尋找指定路徑
Resource resource=new ClassPathResource("applicationContext.xml");
//根據資原始檔建立spring容器
BeanFactory factory=new XmlBeanFactory(resource);
//從spring容器中獲取指定的bean物件
helloworld world=(helloworld) factory.getBean("helloworld");
world.sayhello();
}
@Test
//手動模擬配置xml,底層必須弄懂,第一個測試
public void testauto() throws Exception {
//第一步:得到類的全限定名
Class clz=Class.forName("helloworld.helloworld");
//建立物件,獲取到無引數構造器;
clz.newInstance();
}
@Test
//手動模擬配置xml
public void testauto1() throws Exception {
//第一步:得到類的全限定名
Class clz=Class.forName("helloworld.helloworld");
//獲得構造器
Constructor con=clz.getConstructor();
//設定可訪問的
con.setAccessible(true);
//建立物件
Object obj=con.newInstance();
//使用內省機制賦值
BeanInfo info= Introspector.getBeanInfo(clz,Object.class);
PropertyDescriptor []pds=info.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if("username".equals(pd.getName())){
//獲得該屬性的寫入方法,既setter
pd.getWriteMethod().invoke(obj,"洲洲");
break;
}
}
helloworld world=(helloworld) obj;
world.sayhello();
}
//獲取getBean的三種寫入方式
@Test
public void testbean(){
//從Classpath獲取指定路徑
Resource resource=new ClassPathResource("applicationContext.xml");
//根據資原始檔建立spring容器
BeanFactory factory=new XmlBeanFactory(resource);
//從spring容器中獲取bean容器
//第一種方式:根據物件的型別來獲取
// helloworld world=factory.getBean(helloworld.class);
// world.sayhello();
//第二種方式:根據bean的id或name來獲取
helloworld world=null;
// world=(helloworld) factory.getBean("helloworld1");
// world.sayhello();
//第三種方式:同時使用bean的id或者name結合物件的型別使用
world=(helloworld) factory.getBean("helloworld2",helloworld.class);
world.sayhello();
}
}
結果為: