-
请教 动态代理 session 什么时候注入5
//接口实现类 public class BranchgoodsGroupImpl implements BranchGoodsGroupDao { private Session session; public Session getSession() { return session; } public void setSession(Session session) { this.session = session; } public Iterator getBranchGoodsGroupList(int branchid, String groupclass) { return session.createQuery("from SBranchgoodsGroup where SBranchgoodsGroup.id.branch.id=? and SBranchgoodsGroup.id.groupclass=?") .setInteger(0, branchid) .setString(1, groupclass).list().iterator(); } public Iterator getGoodsGroupListbyBranchid(int branchid) { return session.createQuery("select SBranchgoodsGroup.id.groupclass from SBranchgoodsGroup where SBranchgoodsGroup.id.branch.id=? group by SBranchgoodsGroup.id.groupclass") .setInteger(0, branchid).list().iterator(); } public int create(Object o) { session.saveOrUpdate(o); return 0; } public int delete(Object o) { session.delete(o); return 0; } public int update(Object o) { session.update(o); return 0; } } //代理 public class DynaProxyGoodsGroup implements InvocationHandler { /** * 要处理的对象(也就是要在方法的前后加上业务逻辑的对象) */ private Object delegate; /** * 动态生成方法被处理过后的对象 * @param delegate 1 * @param proxy * @return */ public Object bind(Object delegate) { this.delegate = delegate; return Proxy.newProxyInstance(this.delegate.getClass().getClassLoader(), this.delegate.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; Session session=null; Transaction tx = null; try{ session= SessionFactory.currentSession(); tx = session.beginTransaction(); result= method.invoke(this.delegate, args); session.flush(); tx.commit(); } catch (org.hibernate.exception.DataException de) { de.printStackTrace(); if (tx != null) tx.rollback(); throw de; } catch (org.hibernate.exception.GenericJDBCException gg) { gg.printStackTrace(); if (tx != null) tx.rollback(); throw gg; } catch (Exception ex) { ex.printStackTrace(); if (tx != null) tx.rollback(); throw new RuntimeException(ex.getMessage()); } finally { if (session != null) { try { SessionFactory.closeSession(); } catch (HibernateException e) { throw new RuntimeException(e); } } } return result; } } //testcase public class Test { public static void main(String[] args) { BranchGoodsGroupDao hello = (BranchGoodsGroupDao)new DynaProxyHello().bind(new BranchgoodsGroupImpl()); hello.getGoodsGroupListbyBranchid(1); } }
问题出来了 当我调用 hello.getGoodsGroupListbyBranchid(1); 时候 发现session是空 困惑我的是 session应该如何引入到DAO里面去..
2008年7月12日 20:36
2个答案 按时间排序 按投票排序
-
采纳的答案
public class BranchgoodsGroupImpl implements BranchGoodsGroupDao { public Session getSession() { return session; }
改成
public Session getSession() { return SessionFactory.currentSession(); }
应该就好了吧?
没必要注入的,既然都可以直接拿到. 而且,session是和当前状态完全相关的,使用注入,很别扭.2008年7月13日 15:02
-
当然下面的所有使用session的方法,也改成使用getSession().
public Iterator getBranchGoodsGroupList(int branchid, String groupclass) { return session.createQuery("from SBranchgoodsGroup where SBranchgoodsGroup.id.branch.id=? and SBranchgoodsGroup.id.groupclass=?") .setInteger(0, branchid) .setString(1, groupclass).list().iterator(); }
改成
getSession().createQuery(...);
2008年7月13日 15:03
相关推荐
C++ 突破SESSION0隔离的远线程注入,可用于注入Winloogon.exe ,XP、win7、win10亲测都可以使用,注入器需要管理员身份运行。本人主要用于注入winlogon,winsta0\winlogon截屏使用
两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
本篇文章将深入探讨四个关键技术:Nginx的反向代理、负载均衡、Redis的session共享以及Keepalived实现的高可用性。这些技术是现代Web服务架构中的核心组件,用于提升系统的性能、可靠性和可扩展性。 首先,Nginx是...
【session session session szsessdifn】 在Web开发中,Session是一个至关重要的概念,尤其是在ASP.NET框架下。Session机制是服务器端存储用户特定信息的一种方式,它允许开发者在多个页面之间保持用户状态,解决了...
3. **代理服务器**:设置一个代理服务器,所有跨域请求都通过代理服务器转发,服务器端保持session不变,前端只需与代理服务器通信即可。 4. **WebSocket**:WebSocket协议本身支持跨域,可以用来传输session信息,...
session驱动类 session存入数据库 数据库存储session 用于session存入数据库
在现代Web应用开发中,session共享是一个至关重要的需求,特别是在分布式系统中,多个服务器节点需要共享用户的状态信息。Spring Session + Redis的结合提供了一个高效且可靠的解决方案,它允许跨服务器节点透明地...
在Web开发中,Session是一种非常重要的机制,用于在用户的整个会话期间保持数据。JavaScript(JS)作为客户端脚本语言,通常与HTML和CSS一起工作,处理用户交互和动态更新页面内容。然而,由于安全性和同源策略的...
6. **服务器端代理**:最安全且可靠的方法是不在客户端处理跨域`session`,而是通过服务器端的代理。例如,服务器可以接收来自`iframe`的请求,然后转发到实际的目标,并在响应中包含`session`信息。 在提供的文件...
如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...
Spring Session通过与Redis的集成,将Session数据序列化后存储到Redis中,每次请求时从Redis读取Session数据,确保了多服务器间的Session一致性。 **3. 集成Spring Session与Redis** 首先,你需要在项目中添加...
在现代Web应用开发中,Session共享是一个常见的需求,特别是在分布式系统中。`SpringSession` 是一个优秀的框架,它提供了一种优雅的方式来进行Session管理,尤其是跨服务器的Session共享。配合`Redis`作为存储后端...
js 销毁session,session js 销毁session,session
在`Startup.cs`文件的`ConfigureServices`方法中,注入`IServiceCollection`,并调用`AddSession`方法来配置Session服务。还需要设置一个会话密钥(SessionId),并可自定义其他选项,如过期时间: ```csharp ...
WebLogic 集群配置及 Session 共享 WebLogic 集群配置是指在多台服务器上部署相同的应用程序,以提高系统的可用性和可扩展性。 Session 共享是指在集群环境中,多台服务器之间共享用户的会话信息,以便在用户在不同...
SSM+Redis 实现Session共享是现代Web应用中常见的技术组合,主要目的是在分布式系统中保持用户Session的一致性。SSM是指Spring、Spring MVC和MyBatis这三大Java Web开发框架的组合,而Redis则是一种高性能的键值存储...
Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是关于Springboot实现多服务器session共享...
- 当需要针对不同的用户或操作动态调整Session超时时间时,可以使用Java Servlet API提供的方法。 - 通过调用`HttpSession`对象的`setMaxInactiveInterval(int interval)`方法,可以为特定的Session设置超时时间(以...