默认状态,共享实例
在没有设置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>