默認狀態,共享實例
在沒有設置bean的scope屬性,這個bean的作用域是屬於共享實例的,所謂的共享實例是指的所有的bean對象引用的都是同一個bean.。默認scope的值爲singleton缺省
Boy boy1=(Boy)ctx.getBean("boy1", Boy.class);
Boy boy2=ctx.getBean("boy1", Boy.class);
System.out.println(boy1.equals(boy2)); //true
非共享實例
每次產生的bean 對象都是不同的,scope的值爲prototype
修改測試:將bean的作用域設置爲 prototype
<bean id="boy1" class="spring.bean.Boy" scope="prototype"><!-- 引用其他的bean對象 -->
<property name="name" ><value>鵬翔</value></property>
<property name="girl" ref="girl4"></property><!-- 他要找的對象是在這個表裏註冊的對象 ref 來使用-->
</bean>
測試結果:
Boy boy1=(Boy)ctx.getBean("boy1", Boy.class);
Boy boy2=ctx.getBean("boy1", Boy.class);
System.out.println(boy1.equals(boy2));
此時的作用域爲非共享,故其不同
其餘還有request與session,這是在web項目中使用的。
如何在三層架構中使用Spring
數據庫訪問層
package spring.dao;
public class UserInfoDao {
public void add(){
System.out.println("這是數據庫訪問類");
}
}
服務層
package spring.service;
import spring.dao.UserInfoDao;
public class UserInfoService {
private UserInfoDao userinfodao;
//生成了get與set方法
public UserInfoDao getUserinfodao() {
return userinfodao;
}
public void setUserinfodao(UserInfoDao userinfodao) {
this.userinfodao = userinfodao;
}
public void addservice(){
System.out.println("服務層調用數據庫訪問層");
userinfodao.add();
//服務層調用數據庫訪問層
}
}
action層
package spring.action;
import spring.service.UserInfoService;
public class userinfoaction {
private UserInfoService userservice;
public UserInfoService getUserservice() {
return userservice;
}
public void setUserservice(UserInfoService userservice) {
this.userservice = userservice;
}
public void addaction(){
System.out.println("這是action層,調用業務層方法");
userservice.addservice();
}
}
配置文件:`此即爲自動裝配
<!-- 首先配置dao層 -- 次即爲自動裝配,找屬性名和bean名都一樣的,然後自動裝配到屬性裏,因此取名字一定要有意義>
<bean id="userinfodao" class="spring.dao.UserInfoDao" autowire="byName"> </bean>
<!-- 配置service層 -->
<bean id="userservice" class="spring.service.UserInfoService" autowire="byName"></bean>
<!-- 配置action層 -->
<bean id="userinfoaction" class="spring.action.userinfoaction" autowire="byName"></bean>