SSH入门系列13:bean类引用及范围
SSH入门系列13:bean类引用及范围
ORZ你好 发表于3个月前
SSH入门系列13:bean类引用及范围
  • 发表于 3个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

在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>

最后测试和之前一样

共有 人打赏支持
粉丝 0
博文 13
码字总数 9911
×
ORZ你好
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: