0 0

请教 动态代理 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里面去..
DAO 
2008年7月12日 20:36

2个答案 按时间排序 按投票排序

0 0

采纳的答案

public class BranchgoodsGroupImpl implements BranchGoodsGroupDao {
    public Session getSession() {   
        return session;   
    }   


改成

    public Session getSession() {   
        return SessionFactory.currentSession();     
    }  


应该就好了吧?
没必要注入的,既然都可以直接拿到. 而且,session是和当前状态完全相关的,使用注入,很别扭.

2008年7月13日 15:02
0 0

当然下面的所有使用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

相关推荐

    突破SESSION0隔离的远程线程注入.zip

    C++ 突破SESSION0隔离的远线程注入,可用于注入Winloogon.exe ,XP、win7、win10亲测都可以使用,注入器需要管理员身份运行。本人主要用于注入winlogon,winsta0\winlogon截屏使用

    nginx反向代理导致session失效的问题解决

    两边通过同一个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共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...

    Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    本篇文章将深入探讨四个关键技术:Nginx的反向代理、负载均衡、Redis的session共享以及Keepalived实现的高可用性。这些技术是现代Web服务架构中的核心组件,用于提升系统的性能、可靠性和可扩展性。 首先,Nginx是...

    session session session szsessdifn

    【session session session szsessdifn】 在Web开发中,Session是一个至关重要的概念,尤其是在ASP.NET框架下。Session机制是服务器端存储用户特定信息的一种方式,它允许开发者在多个页面之间保持用户状态,解决了...

    跨域共享session (实现http跳转https 共享session)

    3. **代理服务器**:设置一个代理服务器,所有跨域请求都通过代理服务器转发,服务器端保持session不变,前端只需与代理服务器通信即可。 4. **WebSocket**:WebSocket协议本身支持跨域,可以用来传输session信息,...

    session驱动类 session存入数据库

    session驱动类 session存入数据库 数据库存储session 用于session存入数据库

    Spring Session + redis实现session共享

    在现代Web应用开发中,session共享是一个至关重要的需求,特别是在分布式系统中,多个服务器节点需要共享用户的状态信息。Spring Session + Redis的结合提供了一个高效且可靠的解决方案,它允许跨服务器节点透明地...

    js操作session例子

    在Web开发中,Session是一种非常重要的机制,用于在用户的整个会话期间保持数据。JavaScript(JS)作为客户端脚本语言,通常与HTML和CSS一起工作,处理用户交互和动态更新页面内容。然而,由于安全性和同源策略的...

    iframe 跨域访问session

    6. **服务器端代理**:最安全且可靠的方法是不在客户端处理跨域`session`,而是通过服务器端的代理。例如,服务器可以接收来自`iframe`的请求,然后转发到实际的目标,并在响应中包含`session`信息。 在提供的文件...

    自己实现的spring-session

    如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...

    spring session redis分布式session

    Spring Session通过与Redis的集成,将Session数据序列化后存储到Redis中,每次请求时从Redis读取Session数据,确保了多服务器间的Session一致性。 **3. 集成Spring Session与Redis** 首先,你需要在项目中添加...

    SpringSession+Redis实现Session共享案例

    在现代Web应用开发中,Session共享是一个常见的需求,特别是在分布式系统中。`SpringSession` 是一个优秀的框架,它提供了一种优雅的方式来进行Session管理,尤其是跨服务器的Session共享。配合`Redis`作为存储后端...

    js 销毁session,session

    js 销毁session,session js 销毁session,session

    .net core 6 使用session进行验证

    在`Startup.cs`文件的`ConfigureServices`方法中,注入`IServiceCollection`,并调用`AddSession`方法来配置Session服务。还需要设置一个会话密钥(SessionId),并可自定义其他选项,如过期时间: ```csharp ...

    weblogic集群配置及session共享

    WebLogic 集群配置及 Session 共享 WebLogic 集群配置是指在多台服务器上部署相同的应用程序,以提高系统的可用性和可扩展性。 Session 共享是指在集群环境中,多台服务器之间共享用户的会话信息,以便在用户在不同...

    ssm+redis 实现session共享

    SSM+Redis 实现Session共享是现代Web应用中常见的技术组合,主要目的是在分布式系统中保持用户Session的一致性。SSM是指Spring、Spring MVC和MyBatis这三大Java Web开发框架的组合,而Redis则是一种高性能的键值存储...

    Springboot实现多服务器session共享

    Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是关于Springboot实现多服务器session共享...

    设定tomcat中session过期时间.txt

    - 当需要针对不同的用户或操作动态调整Session超时时间时,可以使用Java Servlet API提供的方法。 - 通过调用`HttpSession`对象的`setMaxInactiveInterval(int interval)`方法,可以为特定的Session设置超时时间(以...

Global site tag (gtag.js) - Google Analytics