SSH spring代理sessionFactory 配置泛型中丢失
 package ssh.action;

import java.text.DecimalFormat;
import java.util.List;


import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import ssh.dao.ModelDrivenBaseAction;
import ssh.entity.BookCard;
import ssh.service.IndexService;

//创建IndexAction(action类)继承ActionSupport接口
public class IndexAction extends  ModelDrivenBaseAction<BookCard> {

    private static final long serialVersionUID = 1L;

    //声明service,但不给它创建具体的实现类的实例,



    //编写execute()方法
    public String execute() {

        //获取IndexService实例,调用getAllBookCard()方法
        //将结果保存到List集合里
System.out.println("IndexAction1-------");
        List<BookCard> myBookCardList = is.getAll();
        System.out.println("IndexAction2-------");

        //将查询出来的结构集打印到控制台
        System.out.println("结果集:"+myBookCardList.size());

        //获取Context上下文对象
        ActionContext ac = ActionContext.getContext();
        //将myBookCardList集合添加到上下文对象里
        ac.put("myBookCardList", myBookCardList);

        //返回一个字符串
        return "success";
    }



}package ssh.action;

import java.text.DecimalFormat;
import java.util.List;


import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import ssh.dao.ModelDrivenBaseAction;
import ssh.entity.BookCard;
import ssh.service.IndexService;

//创建IndexAction(action类)继承ActionSupport接口
public class IndexAction extends  ModelDrivenBaseAction<BookCard> {

    private static final long serialVersionUID = 1L;

    //声明service,但不给它创建具体的实现类的实例,



    //编写execute()方法
    public String execute() {

        //获取IndexService实例,调用getAllBookCard()方法
        //将结果保存到List集合里
System.out.println("IndexAction1-------");
        List<BookCard> myBookCardList = is.getAll();
        System.out.println("IndexAction2-------");

        //将查询出来的结构集打印到控制台
        System.out.println("结果集:"+myBookCardList.size());

        //获取Context上下文对象
        ActionContext ac = ActionContext.getContext();
        //将myBookCardList集合添加到上下文对象里
        ac.put("myBookCardList", myBookCardList);

        //返回一个字符串
        return "success";
    }



}




2个回答

 package ssh.dao;

import javax.annotation.Resource;

import ssh.service.IndexService;

public class BaseAction {
    protected IndexService is;

    public IndexService getIs() {
        return is;
    }

    public void setIs(IndexService is) {
        this.is = is;
    }

}

 package ssh.dao;

import java.util.List;

import ssh.entity.BookCard;

//创建IndexDao(接口类)
public interface IndexDao<T> {

    public List<T> getAll();

}
 package ssh.dao;

import java.util.List;

import ssh.entity.BookCard;

//创建IndexDao(接口类)
public interface IndexDao<T> {

    public List<T> getAll();

}
 package ssh.dao;



import ssh.util.GenericsUtils;

import com.opensymphony.xwork2.ModelDriven;

public class ModelDrivenBaseAction<T> extends BaseAction implements ModelDriven<T> {

    // ===================== 对ModelDriven的支持 ====================
    // 收集页面数据,对象
    protected T model;

    public ModelDrivenBaseAction() {
        try {
            System.out.println("————————>ModelDrivenBaseAction");
            // 通过反射获取T的真是类型
            //ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
            //Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
            Class<T> clazz =GenericsUtils.getSuperClassGenricType(getClass(), 0);
            model = clazz.newInstance();
    } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public T getModel() {
        return model;
    }

}

 package ssh.service;

import java.util.List;

import ssh.dao.IndexDao;
import ssh.entity.BookCard;

//创建一个IndexService接口类
public interface IndexService extends IndexDao<BookCard>{



}
 package ssh.service;

import java.util.List;

import org.hibernate.SessionFactory;



import ssh.dao.IndexDao;
import ssh.dao.IndexDaoImpl;
import ssh.entity.BookCard;

//创建IndexServiceImpl(实现类)实现IndexService接口
public class IndexServiceImpl extends IndexDaoImpl<BookCard> implements IndexService {


    //dao实例使用注入方式
    private IndexDao<BookCard> id;
    //用于注入使用



    public void setId(IndexDao<BookCard> id) {
        System.out.println("IndexServiceImpl"+this.getClass());
        this.id = id;


    }



}
 package ssh.util;  
 import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

 public class GenericsUtils  {    
     /**    
      * 通过反射,获得定义Class时声明的父类的范型参数的类型.    
      * 如public BookManager extends GenricManager<Book>    
      *    
      * @param clazz The class to introspect    
      * @return the first generic declaration, or <code>Object.class</code> if cannot be determined    
      */    
     public static Class getSuperClassGenricType(Class clazz) {    
         return getSuperClassGenricType(clazz, 0);    
     }    

     /**    
      * 通过反射,获得定义Class时声明的父类的范型参数的类型.    
      * 如public BookManager extends GenricManager<Book>    
      *    
      * @param clazz clazz The class to introspect    
      * @param index the Index of the generic ddeclaration,start from 0.    
      */    
     public static Class getSuperClassGenricType(Class clazz, int index) throws IndexOutOfBoundsException {    

         Type genType = clazz.getGenericSuperclass();    

    if (!(genType instanceof ParameterizedType)) {    
        return Object.class;    
    }    

    Type[] params = ((ParameterizedType) genType).getActualTypeArguments();    

    if (index >= params.length || index < 0) {    
        return Object.class;    
    }    
    if (!(params[index] instanceof Class)) {    
        return Object.class;    
    }    
    return (Class) params[index];    
}    
 } 
 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
        xmlns:p="http://www.springframework.org/schema/p"  
        xmlns:aop="http://www.springframework.org/schema/aop"   
        xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:jee="http://www.springframework.org/schema/jee"  
        xmlns:tx="http://www.springframework.org/schema/tx"  
        xsi:schemaLocation="    
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
    <!-- 类似于财务部门一样,类就是钱,所有需要类的实例都由srping去管理 -->
    <bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype">
        <!-- setIs(myIndexService) -->
        <property name="is" ref="myIndexService"/>
    </bean>

    <!-- myIndexService = new ssh.service.IndexServiceImpl() -->
    <bean id="myIndexService" class="ssh.service.IndexServiceImpl" scope="prototype">
        <property name="id" ref="myIndexDao"/>
    </bean>

    <bean id="myIndexDao" class="ssh.dao.IndexDaoImpl" scope="prototype">
        <!-- 把sessionFactory 注入给IndexDao -->
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

     <!-- 添加sessionFactory bane ,注意,该类是Spring提供的 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" scope="prototype">
        <!-- 注入Hibernate 配置文件路径,前面要加上  classpath:-->
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    </bean>

</beans>
 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- 数据库连接配置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://121.42.167.134:3306/test?useUnicode=true</property>
        <property name="connection.username">root</property>
        <property name="connection.password">tianqi110</property>
        <!-- 每个数据库都有1个,针对特定的关系型数据库生成优化的SQL -->
        <property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>

        <!-- 设置默认的数据库连接池 -->
        <property name="connection.pool_size">5</property>

        <!-- 显示SQL -->
        <property name="show_sql">true</property>

        <!-- 格式化SQL -->
        <property name="format_sql">true</property>

        <!-- 根据schema更新数据表的工具 -->
        <property name="hbm2ddl.auto">update</property>        

        <!-- 数据表映射配置文件 -->
        <mapping resource="ssh/entity/BookCard.hbm.xml"/>

    </session-factory>
</hibernate-configuration>
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- 上面的头,注意版本,从样例里复制过来 showcase.war\WEB-INF\src\java\struts.xml -->

<struts>
    <!-- 告知Struts2运行时使用Spring来创建对象 -->
    <constant name="struts.objectFactory" value="spring" />

    <!-- 第1步:先定义一个包 -->
    <package name="mypck001" extends="struts-default">
        <!-- 第2步:定义一个action,配置跳转信息 name 类似于Servlet @WebServlet("/IndexServlet") 
            http://xxxx/xxx/Index.action http://xxxx/xxx/Index class 对应于自己写的Action类 当不写method属性时,默认调用的是execute
            class="ssh.action.IndexAction" ** new ssh.action.IndexAction()
            设计思想:关心了具体的实现类必须改为不要关注那个实现类 加入spring后,struts的action节点的class属性意义发生变化,直接引用spring帮忙创建的实例 
        -->
        <action name="Index" class="myIndexAction">
            <!-- 跳转是forward/WEB-INF/是防止jsp不经过action就可以访问-->
            <!-- result接收返回的字符串,然后做对应的事情 -->
            <result name="success">/WEB-INF/jsp/index.jsp</result>
        </action>
    </package>
</struts>
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
spring创建sessionFactory错误
-
spring配置sessionfactory
-
请教一个Spring 配置sessionFactory的问题,求大神解答
-
SSH框架配置sessionFactory无法实例化问题
-
S2SH 中的Spring sessionFactory注入配置问题
-
ssh配置 sessionFactory依赖的jar包找不到
-
SSH运行时sessionFactory报错
-
ssh中spring的配置文件如何配置属性可以在控制台输出hibernate的sql语句?
-
ssh配置时。在xml里配置注入sessionfactory失败。而用@Resource注解的方式配置成功
-
ssh中spring的配置加上事务配置后就出错,恳请大家帮忙
-
spring整合hibernate的sessionFactory,报以下错误
-
springMVC 动态修改SessionFactory
-
SSh整合SessionFactory出错,求解决,改不出来,一天了,下面是错误提示
-
Spring sessionFactory注入配置问题直接报容器错误,请大虾们看看
-
Spring 注解注入 SessionFactory 空指针异常
-
在spring ioc中加载sessionFactory的bean有什么用
-
用spring注入sessionfactory,总是null,请教大家帮我看看是什么问题
-
Spring在配置hibernate sessionfactory出现错误
-
Spring注入sessionFactory失败,大神能帮我看下是为什么?
-
记一道字节跳动的算法面试题
点击蓝色“五分钟学算法”关注我哟加个“星标”,天天中午 12:15,一起学算法作者 | 帅地来源公众号 | 苦逼的码农前几天有个朋友去面试字节跳动,面试官问了他一道链表相...
程序员真是太太太太太有趣了!!!
网络上虽然已经有了很多关于程序员的话题,但大部分人对这个群体还是很陌生。我们在谈论程序员的时候,究竟该聊些什么呢?各位程序员大佬们,请让我听到你们的声音!不管你是前端开发...
史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无 ~中招了咩~ ,还有一些同学依旧在使用eclipse或者Myeclipse开发,我想对这些朋友说IDEA 的编译速度很快,人生苦短,来不及解释了,直接上手idea吧。这篇文章每一步搭建过程都测试过了,应该不会有什么差错。本文章还有个比较优秀的特点,就是idea的使用,基本上关于idea的操作都算是比较详细的,所以不用太担心不会撸idea!最后,本文
吃人的那些 Java 名词:对象、引用、堆、栈
作为一个有着 8 年 Java 编程经验的 IT 老兵,说起来很惭愧,我被 Java 当中的四五个名词一直困扰着:**对象、引用、堆、栈、堆栈**(栈可同堆栈,因此是四个名词,也是五个名词)。每次我看到这几个名词,都隐隐约约觉得自己在被一只无形的大口慢慢地吞噬,只剩下满地的衣服碎屑(为什么不是骨头,因为骨头也好吃)。
LeetCode解题汇总目录
此篇为LeetCode刷题的汇总目录,方便大家查找,一起刷题,一起PK交流! 已解题目 考点 LeetCode 1. 两数之和(哈希) LeetCode 2. 两数相加(单链表反转) LeetCode 9. 回文数 LeetCode 11. 盛最多水的容器(双指针) LeetCode 15. 三数之和 LeetCode 17. 电话号码的字母组合(回溯...
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
不识 Pandas,纵是老手也枉然?
作者 |周志鹏 责编 | 郭 芮 这段时间和一些做数据分析的同学闲聊,我发现数据分析技能入门阶段存在一个普遍性的问题,很多凭着兴趣入坑的同学,都能够很快熟悉Python基础语法,然后不约而同的一头扎进《利用Python进行数据分析》这本经典之中,硬着头皮啃完之后,好像自己什么都会了一点,然而实际操作起来既不知从何操起,又漏洞百出。 至于原因嘛,理解不够,实践不够是两条老牌的拦路...
接班马云的为何是张勇?
上海人、职业经理人、CFO 背景,集齐马云三大不喜欢的张勇怎么就成了阿里接班人? 作者|王琳 本文经授权转载自燃财经(ID:rancaijing) 9月10日,张勇转正了,他由阿里巴巴董事局候任主席正式成为阿里巴巴董事局主席,这也意味着阿里巴巴将正式开启“逍遥子时代”。 从2015年接任CEO开始,张勇已经将阿里巴巴股价拉升了超过200%。但和马云强大的个人光环比,张勇显得尤其...
14 个实用的数据库设计技巧
点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!作者:echozhjuejin.im/post/5d5b4c6951882569eb570958原始单据...
我在快手认识了 4 位工程师,看到了快速发展的公司和员工如何彼此成就!
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 从西二旗地铁站B口出来,步行700多米可以看到一个工业建筑风格的院子。这个独立的院子和后厂村各大互联网公司的高楼林立有些不同。 院子里有7栋6层高的楼,几栋楼之间打通,可以从A栋自由穿行到F栋。这里就是快手总部。这个园区可以容纳6000多名员工,目前40%以上是研发人员。 这些研发人员维护着快手这款日活超过2亿的ap...
让程序员崩溃的瞬间(非程序员勿入)
今天给大家带来点快乐,程序员才能看懂。 来源:https://zhuanlan.zhihu.com/p/47066521 1. 公司实习生找 Bug 2.在调试时,将断点设置在错误的位置 3.当我有一个很棒的调试想法时 4.偶然间看到自己多年前写的代码 5.当我第一次启动我的单元测试时 ...
用Python分析2000款避孕套,得出这些有趣的结论
到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是: 第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端。 第二篇:淘宝自动登录2.0,新增Cookies序列化,教大家如何将cookies保存起来。 第三篇:Python爬取淘宝商品避孕套,教大家如何爬取淘宝pc端商品信息。 今天,我们来看看淘宝系列的第四篇 我们在上一篇的时候已经将淘宝数据爬取下来了,...
Spring高级技术梳理
Spring高级技术梳理 序言正文SpringDate部分Spring全家桶之SpringData——预科阶段Spring全家桶之SpringData——Spring 整合Hibernate与Hibernate JpaSpring全家桶之SpringData——Spring Data JPASpring全家桶之SpringData——SpringData RedisSpringBoot部分Sp...
如何在Windows中开启"上帝模式"
原文链接 : https://mp.weixin.qq.com/s?__biz=MzIwMjE1MjMyMw==&amp;mid=2650202982&amp;idx=1&amp;sn=2c6c609ce06db1cee81abf2ba797be1b&amp;chksm=8ee1438ab996ca9c2d0cd0f76426e92faa835beef20ae21b537c0867ec2773be...
Docker 零基础从入门到使用
诺!这只可爱的小鲸鱼就是docker了! Docker 是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上( 摘自百度 )。 Docker 能干什么? 在讲 Docker 能干什么之前,我们不妨先看看没有 Docker 和有Docker分别是个什么样子的? 场景一 某公司需要开发...
再见 Docker,是时候拥抱下一代容器工具了
什么是 Linux 容器?Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一...
不足20行 python 代码,高效实现 k-means 均值聚类算法
关于 k-means 均值聚类算法的原理介绍、实现代码,网上有很多,但运行效率似乎都有点问题。今天稍微有点空闲,写了一个不足20行的 k-means 均值聚类算法,1万个样本平均耗时20毫秒(10次均值)。同样的数据样本,网上流行的算法平均耗时3000毫秒(10次均值)。差距竟然达百倍以上,令我深感意外,不由得再次向 numpy 献上膝盖!
分享靠写代码赚钱的一些门路
作者 mezod,译者 josephchang10如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。今天给大家分享一个精彩...
北漂程序员,扬帆起航的地方
随着耳畔传来“你看这碗又大又圆、你看这面又长又宽......碗大宽无影、像儿时的回忆......”听着挺带劲,于是看了一下手机,原来是吴亦凡的作品《大碗宽面》,随着入耳的旋律,脑子也不由自主的想起 10 年前,在平西府吃 5 块钱一大碗牛肉板面的情景。 平西府最有名的就是这个牌坊啦。记得每当有同事问起住哪里?都会自豪的说住在王府里;隔三差五也会邀请朋友去府上坐坐。其实打内心里讲,平西府是一个...
技术人员要拿百万年薪,必须要经历这9个段位
很多人都问,技术人员如何成长,每个阶段又是怎样的,如何才能走出当前的迷茫,实现自我的突破。所以我结合我自己10多年的从业经验,总结了技术人员成长的9个段位,希望对大家的职...
多线程编程是后台开发人员的基本功
这里先给大家分享一个小故事:在我刚开始参加工作的那年,公司安排我开发一款即时通讯软件(IM,类似于 QQ 聊天软件),在这之前我心里也知道如果多线程操作一个整型值是要加锁...
相关热词 c#该名称在封闭局部范围 c#泛型 排序 c# 测试连接mysql c# 多线程 调用界面值 c# gdi unity c#反射构造带参对象 一起自学c# c#工厂方法 c# 对象属性保存xml u3d用c#写拾取物品