文档章节

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

O
 ORZ你好
发布于 2017/08/24 20:19
字数 579
阅读 5
收藏 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>

最后测试和之前一样

© 著作权归作者所有

共有 人打赏支持
O
粉丝 0
博文 15
码字总数 8932
作品 0
南京
私信 提问
Java深入-框架技巧

Java 程序媛手把手教你设计模式中的撩妹神技 -- 上篇 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样…… ...

掘金官方
01/05
0
0
《鸡啄米C++编程入门系列》系列技术文章整理收藏

《鸡啄米C++编程入门系列》系列技术文章整理收藏 收藏整理鸡啄米C++编程入门系列文章,供个人和网友学习C++时参考 1鸡啄米:C++编程入门系列之前言 2鸡啄米:C++编程入门系列之一(进制数) ...

开元中国2015
2015/05/26
132
0
《鸡啄米C++编程入门系列》系列技术文章整理收藏

《鸡啄米C++编程入门系列》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201812.html 文章 鸡啄米:C++编程入门系列之前言 鸡啄米:C++编程入门系列之一(进制...

开元中国2015
2015/06/27
0
0
Jenkins入门系列

Jenkins 是一个可扩展的持续集成引擎。 主要用于: l 持续、自动地构建/测试软件项目。 l 监控一些定时执行的任务。 Jenkins拥有的特性包括: l 易于安装-只要把jenkins.war部署到servlet容器...

外星人et59
2016/04/21
0
0
MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(一)

(本文示例完整源代码与数据库脚本下载地址:http://down.51cto.com/data/1970833) 在MyBatis中,当我们编写好访问数据库的映射器接口后,MapperScannerConfigurer就能自动成批地帮助我们根...

NashMaster2011
2015/01/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AS连接网易Mumu模拟器

1、安装模拟器 打开这个网址现在模拟器然后安装 http://mumu.163.com/ 2、安装完成后启动模拟器 3、进入模拟器安装目录 例如本机的安装目录:C:\Program Files (x86)\MuMu\emulator\nemu\vmo...

HGMrWang
27分钟前
7
0
设计要做到扩展性强还挺难的

概述 在日常开发中,有时候你的上司会跟你说,这个模块的设计扩展性要高。把这句话说出来很简单,但是要做到则非常难。导致难的其中一个因素是: 你不熟悉这个行业的业务的玩法 我举个例子来...

Sam哥哥聊技术
29分钟前
2
0
聊聊 scala 的模式匹配

一. scala 模式匹配(pattern matching) pattern matching 可以说是 scala 中十分强大的一个语言特性,当然这不是 scala 独有的,但这不妨碍它成为 scala 的语言的一大利器。 scala 的 patt...

终日而思一
30分钟前
1
0
Spring事物手动回滚

手动回滚: 方法1:在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)...

寒风中的独狼
35分钟前
1
0
直角三角形的三角函数

sinA = a/c;A = asin(a/c); 特殊角度的三角函数值

一个小妞
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部