以下面的xml文件舉例
第一個Bean的名稱為role,第二個bean的名稱為medicine,第三個bean的名稱為spring.chapter.mary.Poison,第四個bean的名稱為spring.chapter.mary.Poison#1
id和name的區(qū)別如下
id屬性具有性,每一個Bean只能對應(yīng)一個id
name屬性可以指定一個或多個名稱,各個名稱用逗號分開,第一個是默認(rèn)為標(biāo)示名稱,后面的為這個Bean的別名。
例如
,這里只創(chuàng)建出來一個Bean,注意只有一個。
每一個Bean中都有一個class屬性。
Bean作用域
1singleton作用
該Bean的作用域設(shè)置為singleton,那么springIOC冗長中只會存在一個共享的bean實例。
即兩次調(diào)用后,Role role = (Role)factory.getBean("role");Role role1 = (Role)factory.getBean("role");
role == role1 的值為 true
2prototype作用
prototype作用與部署的bean,每一次請求都會產(chǎn)生一個新的bean實例,
或者,
role == role1 的值為 false
還有其他作用域,這里不再介紹
Bean的屬性,spring有兩種注入方式,一種set注入,一種構(gòu)造子注入。在配置文件總選擇那種方式取決于實體類。
(1)實體類的每個變量都有set方法,此時使用property屬性來配置
(2)史泰龍使用構(gòu)造函數(shù)來配置,此時使用屬性來配置
若一個類中既有構(gòu)造方法,又有set方法
如下:package chapter1;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
public class Hello {
private String msg;
private int example;
public Hello(String msg,int example)
{
this.msg = msg;
this.example = example;
}
public void setExample(int example) {
this.example = example;
}
public void setMsg(String msg)
{
this.msg = msg;
}
public void sayHello()
{
System.out.println(msg);
System.out.println(example);
}
public static void main(String[] args)
{
Resource res = new ClassPathResource("chapter1/bean.xml");
BeanFactory factory = new XmlBeanFactory(res);
Hello hello = (Hello)factory.getBean("helloBean");
hello.sayHello();
}
}
配置文件為:
或者
則最后輸出結(jié)果為:abc 20
可見是set方法起作用。
第一個Bean的名稱為role,第二個bean的名稱為medicine,第三個bean的名稱為spring.chapter.mary.Poison,第四個bean的名稱為spring.chapter.mary.Poison#1
id和name的區(qū)別如下
id屬性具有性,每一個Bean只能對應(yīng)一個id
name屬性可以指定一個或多個名稱,各個名稱用逗號分開,第一個是默認(rèn)為標(biāo)示名稱,后面的為這個Bean的別名。
例如
每一個Bean中都有一個class屬性。
Bean作用域
1singleton作用
該Bean的作用域設(shè)置為singleton,那么springIOC冗長中只會存在一個共享的bean實例。
即兩次調(diào)用后,Role role = (Role)factory.getBean("role");Role role1 = (Role)factory.getBean("role");
role == role1 的值為 true
2prototype作用
prototype作用與部署的bean,每一次請求都會產(chǎn)生一個新的bean實例,
role == role1 的值為 false
還有其他作用域,這里不再介紹
Bean的屬性,spring有兩種注入方式,一種set注入,一種構(gòu)造子注入。在配置文件總選擇那種方式取決于實體類。
(1)實體類的每個變量都有set方法,此時使用property屬性來配置
(2)史泰龍使用構(gòu)造函數(shù)來配置,此時使用
若一個類中既有構(gòu)造方法,又有set方法
如下:package chapter1;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
public class Hello {
private String msg;
private int example;
public Hello(String msg,int example)
{
this.msg = msg;
this.example = example;
}
public void setExample(int example) {
this.example = example;
}
public void setMsg(String msg)
{
this.msg = msg;
}
public void sayHello()
{
System.out.println(msg);
System.out.println(example);
}
public static void main(String[] args)
{
Resource res = new ClassPathResource("chapter1/bean.xml");
BeanFactory factory = new XmlBeanFactory(res);
Hello hello = (Hello)factory.getBean("helloBean");
hello.sayHello();
}
}
配置文件為:
則最后輸出結(jié)果為:abc 20
可見是set方法起作用。