1. 程式人生 > >Spring之HELLO WORLD

Spring之HELLO WORLD

Ioc和DI介紹

 

 

HELLO WORLD程式

 

 

 

 

 

getBean方法的三種簽名

解決方案:

 

 

 

 

 

 

專案檔案:

 

 

applicationContext.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd" >

<bean id="helloworld" class="helloworld.helloworld">

<property

name="username" value="洲洲"></property>

</bean>

<bean id="helloworld1" class="helloworld.helloworld">

<property name="username" value="蘇洲"></property>

</bean>

<bean id="helloworld2" class="helloworld.helloworld">

<property name="username" value=

""></property>

</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();

//第二種方式:根據beanidname來獲取

helloworld world=null;

// world=(helloworld) factory.getBean("helloworld1");

// world.sayhello();

//第三種方式:同時使用beanid或者name結合物件的型別使用

world=(helloworld) factory.getBean("helloworld2",helloworld.class);

world.sayhello();

}

}

 

 

 

結果為: