SSH入门系列13:bean类引用及范围

在Spring中,如果你需要在一个类中定义另一个类。在这种情况下,参数注入时,则需要引用不同的参数。以上文的girl为事例:

  private String girlName;
   private  List<String>  hobbies;
   private Map<String,Integer> score;

随后定义boy.java

   private String name;
    private girl girl;

最后在applicationContext.xml中进行引用:

  <bean id="boy1" class="com.spring.bean.boy">
       <property name="name">
       <value>林惊羽</value>
       </property>
  <property name="girl"  ref="girl1"></property>
  </bean>

测试程序如下:

     boy boy = (boy)ac.getBean("boy1");

     System.out.println(boy.getName()+":妹子姓名是"+boy.getGirl().getGirlName());


      bean的作用域

1)如果没有scope属性,这个bean的作用域是属于共享实例的,所谓共享实例是指所有的 bean对象都引用同一个实例对象。默认bean的 scope值是singleton,简单的说就是:

     boy boy = (boy)ac.getBean("boy1");

   boy boy1 = (boy)ac.getBean("boy1");

boy.equals(boy1) 输出为true;

2)非共享实例:对同一个beanID,每次产生bean的对象都不一样,此时scope的值是prototype

3)web类型:request 和session 都是在web情况下使用,都是一个bean对应一个实例,而且request每次请求都会有各自的request。

如果在web开发中,各个层次的bean做如下引用:

在Dao层

public class UserInfoDao {
   public void add(){
       System.out.println("这是数据库访问类");
   }
}


在Service层

public class UserInfoService  {
    private UserInfoDao userInfoDao;
    public void addService(){
        System.out.println("业务层调用数据库访问层");
        userInfoDao.add();
    }
    public UserInfoDao getUserInfoDao() {
        return userInfoDao;
    }
    public void setUserInfoDao(UserInfoDao userInfoDao) {
        this.userInfoDao = userInfoDao;
    }
}

在action层

public class UserInfoAction {
    public UserInfoService getUserInfoService() {
        return userInfoService;
    }

    public void setUserInfoService(UserInfoService userInfoService) {
        this.userInfoService = userInfoService;
    }

    private UserInfoService  userInfoService;
    
    public void addAction(){
      System.out.println("这是action层调用业务层方法");    
      userInfoService.addService();
    }
}

applicationContext.xml做如下配置:

<!-- 首先配置dao层bean -->
  <bean  id="userInfoDao"  class="com.spring.dao.imp.UserInfoDao">
  </bean>
 
  <!-- 配置service层的bean   autowire 属性名字和bean的名字一样,即可实现 否则需要一个一个property 进行配置 -->
  <bean  id="userInfoService"  class="com.spring.service.UserInfoService"  autowire="byName"></bean>

 <!-- 配置action层的bean -->
<bean id="UserServiceBean"  class="com.spring.action.UserInfoAction"  autowire="byName"></bean>
</beans>

最后如下测试:

   UserInfoAction  userInfo = (UserInfoAction)ac.getBean("UserServiceBean");
               userInfo.addAction();

实际上,spring提供了一种 简化的注入方式 :通过命名空间来实现,实现步骤如下:

           首先在applicationContext.xml加入命名空间:p

          xmlns:p="http://www.springframework.org/schema/tx"

在编写bean的时候,通过简化属性进行注入,

 <!-- 通过命名空间注入 -->
<bean id="girl5"  p:girlName="陆雪琪" class="com.spring.bean.girl">
   </bean>

最后测试和之前一样

转载于:https://my.oschina.net/u/3533686/blog/1523118

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值