如何正确的创建对象并使用--Spring注入对象的使用

今天工作中遇到了一个问题,同样的一行代码在两个方法中都有,因为工作特殊的原因无法贴出代码

将举例记录

public class AA{
    public void methodA(account){
       sortSequenceFor(account,this.configOrdder);
    }
}
public class AA{
    public void methodB(account){
       handleLogic();
       sortSequenceFor(account,this.configOrdder);
    }
}

使用:

methodA是直接调用的,this对象正常,所有的属性都有,该方法也能正常调用

methodB, 在调用前直接创建了一个局部变量AA的对象,然后通过才调用的methodB

问题:

我们发现methodB中的this.configOrder为null,一开始很困惑为什么methodA 都正常且有只,而methodB里面就成null了,后来突然想到这个this会不会有问题,就debug跟了下,果然两个this不一样,第一个所有的属性值都有,第二个只有一个new出来的空对象。

是我们的逻辑出了问题,应该始终用启动时spring注入的对象。

解决办法:

在调用methodB的类中注入AA 类,删掉之前new的对象,这样就正常了

知识点:spring bean注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
--------当当网SSH重构---------- 1.DAO需要根据原有接口全部重构. 采用Spring+Hibernate方式实现 2.Service改造工作 采用Spring的IoC注入方式使用DAO 3.Action改造工作 采用整合插件注入方式使用Spring容器中的Service或DAO. (默认按名称匹配规则) 4.配置信息的改造 Service和DAO需要交给Spring容器. struts.xml不需要改变,因为引入struts-spring-plugin.jar后,Action创建会交给插件的ObjectFactory. web.xml需要定义ContextLoaderListener,实例化容器配置 5.将事务管理交个Spring,采用AOP方式,删除原有Struts事务拦截器 -------------改造步骤----------------- 例如用户注册功能 1) 引入Hibernate开发包 2) 引入Spring开发包和配置文件 applicationContext-base.xml 定义共同的datasource,sessionFactory applicationContext-dao.xml 定义DAO组件 applicationContext-service.xml 定义Service组件 applicationContext-aop.xml 定义事务管理,其他AOP功能 3)根据现有接口重构DAO组件 --检查hbm映射文件内容正确性 --在spring容器中配置DAO组件 定义到applicationContext-dao.xml中 --定义sessionfactory,datasource(只做一次) 定义到applicationContext-base.xml中 4)改造Service组件 --采用注入方式使用DAO --在spring容器中配置Service组件 定义到applicationContext-service.xml中 5)改造Action组件 --采用注入方式使用DAO和Service --引入Struts和Spring整合插件包(只做一次) struts2-spring-plugin.jar 6)修改web.xml,配置ContextLoaderListener(只做一次) ---------重构当当涉及的一些关联查询--------- 1.产品浏览模块 1)涉及数据表如下 d_category d_category_product d_product d_book 2)最新上架图书功能 a. findNew.action-->NewProductAction-->ProductDAO b.重构ProductDAO 添加hbm.xml映射文件 添加HibernateProductDAO实现类 添加DAO在Spring的配置 c.改造NewProductAction 采用注入形式使用DAO.(名称匹配) 3)类别显示区域 a.findCategory.action-->CategoryAction-->CategoryDAO 改造成CategoryAction-->MainService-->CategoryDAO b.重构CategoryDAO c.提取MainService d.改造CategoryAction 4)类别浏览界面 a.booklist.action-->BookListAction-->CategoryDAO,BookDAO b.重构CategoryDAO c.重构BookDAO d.改造BookListAction -----------特殊功能改造------------ 1.主界面左侧类别菜单显示.可以利用Hibernate一对多映射,加载当前类别的子元素.(参考hibernate05工程Category示例) 2.分类浏览页面,左侧类别及其产品数量显示.数量统计可以采用Hibernate中formula映射实现. 3.购物车业务组件利用Spring中scope="session" a.购买处理流程 buy.action-->BuyAction-->CartFactory-->ShoppingCart -->ProductDAO 将ShoppingCart组件交给容器并且设置scope="session"后, 需要使用cart对象时,容器首先去session对象寻找,有的话返回;没有spring会创建一个并放入spring容器,然后将cart返回.等价于原有CartFactory的功能逻辑. b.如果使用scope="session"或scope="request" 需要在web.xml中定义RequestContextListener ==============性能提升================= 1.二级缓存和查询缓存 二级缓存适用于产品查看功能.对产品对象采用二级缓存存储. (参考hibernate06内容及示例) 查询缓存适用于主页面左侧分类菜单显示功能. (参考hibernate06内容及示例) 2.fetch和cache的使用 利用join fetch可以提高查询效率,将关联属性随着主对象一起采用表连接的形式查询. 如果使用了join fetch的话,查询缓存只缓存主对象.join fetch的关联属性不能缓存. 3.Hibernate假分页问题 如果查询语句使用了join fetch,遇到分页情况下,采用假分页机制执行.(不会生成limit等分页查询命令,首先查所有,然后返回部分需要数据).

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值