Spring中dao的值注入不到业务层,配置文件中的sessionFactory创建也不起作用

问题描述

只有在dao层能得到数据,传不到Biz层,如果在Biz层  buyinfoDAO=new BuyinfoDAOImpl();就没问题了,但就没有依赖注入的意义了java代码: applicationContext.xml配置:<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocations"><list><value>classpath:hibernate.cfg.xml</value></list></property></bean><!-- 配置Hibernate的事务管理器 --><!-- 使用HibernateTransactionManager类实现基于Hibernate的事务管理器 --><bean id="TxManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义事物通知,需要指定一个事务管理器 --><tx:advice id="txAdvice" transaction-manager="TxManager"><tx:attributes><tx:method name="get*" read-only="true" /><tx:method name="find*" read-only="true" /><tx:method name="search*" read-only="true" /><tx:method name="query*" read-only="true" /><tx:method name="add*" propagation="REQUIRED" /><tx:method name="del*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="do*" propagation="REQUIRED" /><tx:method name="*" read-only="true" /></tx:attributes></tx:advice><aop:config><!-- 定义那些方法应用这些规则 --><aop:pointcut id="serviceMethod" expression="execution(* com.jxc.biz.*.*(..))" /><!-- 将应用通知与应用规则方法组合 --><aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" /></aop:config><!-- 配置用户处理DAO  --><bean id="buyinfoDAO" class="com.jxc.dao.impl.BuyinfoDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 配置用户业务处理Biz --><bean id="buyinfoBiz" class="com.jxc.biz.impl.BuyinfoBizImpl"><property name="buyinfoDAO" ref="buyinfoDAO"></property></bean><!-- 配置用户处理Action --><bean id="buyinfoaction" class="com.jxc.action.BuyinfoAction"><property name="buyinfoBiz" ref="buyinfoBiz"></property></bean></beans>  dao实现类package com.jxc.dao.impl;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.jxc.bean.Buyinfo;import com.jxc.dao.BuyinfoDAO;import com.jxc.util.HibernateSessionFactory;public class BuyinfoDAOImpl extends HibernateDaoSupport implements BuyinfoDAO {    Session session=null;    public List<Buyinfo> select() {        session=HibernateSessionFactory.getSession();        String hql="from Buyinfo";        Query query = session.createQuery(hql);        List list=query.list();      /*  List<Buyinfo> list=this.getHibernateTemplate().find("from Buyinfo");*/用这种方法得不到值                return list;    }    /**     * @param args     */    public static void main(String[] args) {        BuyinfoDAOImpl buyinfoDAOImpl=new BuyinfoDAOImpl();        List<Buyinfo> list=buyinfoDAOImpl.select();        System.out.println(list.size());    }} biz层:package com.jxc.biz.impl;import java.util.List;import com.jxc.bean.Buyinfo;import com.jxc.biz.BuyinfoBiz;import com.jxc.dao.BuyinfoDAO;import com.jxc.dao.impl.BuyinfoDAOImpl;public class BuyinfoBizImpl implements BuyinfoBiz {        private BuyinfoDAO buyinfoDAO ;    public void setBuyinfoDAO(BuyinfoDAO buyinfoDAO) {        this.buyinfoDAO = buyinfoDAO;    }        /**     * 查询进货记录     */    public List select() {      //buyinfoDAO=new BuyinfoDAOImpl();        List<Buyinfo> list=null;        try {            list = this.buyinfoDAO.select();        } catch (Exception e) {                        e.printStackTrace();        }        return list;    }      public static void main(String[] args){        BuyinfoBizImpl buy = new BuyinfoBizImpl();        List list=buy.select();        System.out.println(list.size());                            }    } package com.jxc.action;import java.util.List;import java.util.Map;import com.jxc.bean.Buyinfo;import com.jxc.biz.BuyinfoBiz;import com.jxc.biz.impl.BuyinfoBizImpl;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class BuyinfoAction extends ActionSupport {    private Buyinfo buy=null;    private BuyinfoBiz buyinfoBiz;    public Buyinfo getBuy() {        return buy;    }    public void setBuy(Buyinfo buy) {        this.buy = buy;    }        public void setBuyinfoBiz(BuyinfoBiz buyinfoBiz) {        this.buyinfoBiz = buyinfoBiz;    }     @SuppressWarnings("unchecked")    public String select(){        Map session = ActionContext.getContext().getSession();        BuyinfoBizImpl b=new BuyinfoBizImpl();        List list=null;        try {            list = b.select();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        session.put("buyinfo", list);        return "select";                    }  }

解决方案

你在BuyinfoBizImpl 里边用main方法去测试的吗?这样肯定是不行的,需要用spring去管理bean才行。另写一个测试类ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");去初始化spring,然后用context.getBean去获取BuyinfoBiz,再进行测试。你看看完整的spring入门吧。http://liuzidong.iteye.com/blog/899420/
解决方案二:
你在main方法里相当于重新开启了一个线程,跟你配置的文件一点关系都没有了。所以如果你想测试需要先加载xml配置文件,这样通知spring管理bean,然后你才可以使用哦
解决方案三:
web容器启动的时候日志会打印已经初始化的对象,你在后台打印的信息里查询“buyinfoDAO”,如果查找到说明已经初始化,如果没查到说明没有初始化,然后再考虑是否注入成功的问题

时间: 2024-12-23 14:26:37

Spring中dao的值注入不到业务层,配置文件中的sessionFactory创建也不起作用的相关文章

python字典的格式化字符串中如果键值是个整数,格式化字符串中的括号内容怎么写?

问题描述 python字典的格式化字符串中如果键值是个整数,格式化字符串中的括号内容怎么写? 比如: test={'3':'hello', 3:99} "%(3)s" % test #输出的是'hello' 那我怎么格式化输出99呢? 解决方案 对于你这种方式,dict只支持字符串形式的key,对于int类型,你可以直接取取 "%d" % test[3] 解决方案二: 字典的格式化字符串字典:格式化字符串python字典的格式化字符串

Struts2中呈现问题:如何实现在指定层div中呈现链接结果

问题描述 在一个jsp中有两个层<div id="a">.<div id="b">,在层a中有一个链接href,它会返回了一个jsp页面.我希望返回的jsp页面能在层b中显示出来.因为不希望用iframe来实现,希望点拨点拨! 解决方案 struts2的ajax链接不灵,不用白费力了.可以用jquery$(function(){ $("#a").click(function(){ $.get(url,{_:+new Dat

Strust2关于jsp页面中的属性值怎么封装成类传入action中?

问题描述 我用的是在Struts2中在jsp页通过struts2特殊标签讲对应的属性值封装成类传入action中,可是总是报空指针异常:目前所包含的条件有:1.实体类:其中包括了实体对象的各种set和get方法:2.实体映射文件:<hibernate-mapping><classname="com.rzq.bean.Userinfo"table="userinfo"catalog="rzq_3aweb"><idnam

js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解_javascript技巧

js:$("<li>"+(i==0?"class='cur'":"")+"</li>").appendTo("ul"); jsp: <c:forEach items="${list}" var="listValue" varStatus="idx">         <li class="${id

【spring源码学习】spring配置的事务方式是REQUIRED,但业务层抛出TransactionRequiredException异常问题

(1)spring抛出异常的点:org.springframework.orm.jpa.EntityManagerFactoryUtils public static DataAccessException convertJpaAccessExceptionIfPossible(RuntimeException ex) { // Following the JPA specification, a persistence provider can also // throw these two

如何获取notes中的邮件账户列表,它是存在配置文件中还是存在邮件数据库中呢?

问题描述 想获取notes中的邮件账户列表,请各位高手指点一下. 解决方案 解决方案二:得到所有用户账户使用情况,导出到excelsubaaaOnErrorGotoerrhandleDimssAsNewNotesSessionDimdbdirAsNotesDbDirectoryDimdbAsNotesDatabaseDimxlAppAsVariant,xlsheetAsVariant,rowsAsInteger,colsAsIntegerservername=Evaluate(|@servern

Spring进阶之路(1)-Spring核心机制:依赖注入/控制反转

原文地址:http://blog.csdn.net/wangyang1354/article/details/50757098 我们经常会遇到这样一种情景,就是在我们开发项目的时候经常会在一个类中调用其他的类中的方法,来完成我们期望的任务,大部分的情况下往往会采用在当前需要的这个类里面new一个实例出来,然后调用他的方法,那么这样的话会有个问题,就是有一天我想改变下这个类,改为其他的名称,那么这时候必须要做的是同时去调用方的类文件中改变这个改变的类的名称.这样的情况是因为代码的耦合带来了后期维护

在JavaScript中使用NaN值的方法

  这篇文章主要介绍了在JavaScript中使用NaN值的方法,是JS入门学习中的基础知识,需要的朋友可以参考下 不带引号的字面常量NaN是一个特殊的值,表示不是非数字.由于NaN总是比较不等的情况,以任何数,包括NaN,它通常是用于指示应该返回一个有效的数的函数的错误条件. 注意:使用isNaN()全局函数来查看是否值是NaN值. 语法 您可以使用以下语法访问属性: ? 1 var val = Number.NaN; 示例 : 在这里,dayOfMonth分配NaN,如果是大于31,并显示一

EasyUI中combobox默认值注意事项

 这篇文章主要介绍了EasyUI中combobox默认值注意事项,是个人在项目中遇到并解决的事宜,分享给大家,需要的朋友可以参考下     在修改数据时,需要先加载数据. 在加载combobox数据的时候,从后台传来的应该int类型的数据. html代码   代码如下: <tr> <td style="text-align: right;">院系:</td> <input type="hidden" id="bel