`

如果把一个session scope的bean注入给service(把登陆后session范围的user注入到服务层)

阅读更多
老系统移植到基于spring, struts, hibernate架构,由于原有权限都是做到service层,即在调用某个业务方法的前面硬编码判断是否有权限。权限做到service里是否合理暂且不考虑。

原来action调用service的方法时都要给service方法多传递一个UserInfo 参数,现在想使用spring给service注入保存在session中的UserInfo, 不知如果解决。

service和dao应该都时单例的
-----------------------------------------------------------
public class UserAction extends BaseAction{

public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {

UserForm userForm = (UserForm)form;
UserInfo user = userForm.getUser();
user = getFacade().getUserService().login(user.getUserName(), user.getPassword());
if(user==null){ //无此用户,即登陆失败
throw new ApplicationException("对不起,用户名或密码错误,登陆失败");
}
request.getSession().setAttribute("userInfo", userInfo);
return mapping.findForward("success");
}
}
-----------------------------------------------------------
<!-- 配置session范围的userInfo -->
<bean id="userInfo" class="com.digitalchina.pmcenter.user.entity.UserInfo" scope="session">
<aop:scoped-proxy/>
</bean>

<!-- 配置Service -->
<bean id="userService" class="com.digitalchina.pmcenter.user.service.impl.UserServiceImpl" scope="prototype">
<property name="userDao" ref="userDao"/>
<property name="userInfo" ref="userInfo"/>
</bean>
-----------------------------------------------------------
public class UserServiceImpl implements UserService{

private UserDao userDao;
         protected UserInfo userInfo;

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
/**
* 合同审核
* 捕获Dao层由spring统一包装后的DataAccessException异常
* 重新抛出服务为异常,并赋予异常代码,服务异常将被action指定捕获
*/
public void auditingContractApply(String userName, String password) {
                  UserInfo userInfo= getUserInfo();
                  //userInfo不空,获得是spring代理类
System.out.println("userInfo from session: "+ userInfo);
                  //userName 为空,不知为什么
                  System.out.println("userName from session: "+ userInfo.getUserName);
try {
//具体调用dao的方法完成业务
} catch (DataAccessException e) {
e.printStackTrace();
throw new ServiceException("合同审核时发生异常");
}
}
}
-----------------------------------------------------------

不知
分享到:
评论
4 楼 vipyhd 2012-07-31  
哥哥 我来看看你嘿嘿 让我找到你了
3 楼 fxfeiyi 2007-10-26  
已经配置了
2 楼 ghl 2007-10-17  
不知道,你是否在web.xml中配置了
<listener>
    <listener-class>org.springframework.web.context.scope.RequestContextListener</listener-class>
</listener>
呵呵,我也是刚刚接触,不知道是不是这个原因
1 楼 fxfeiyi 2007-10-12  
不知spring所说的session scope的bean是否是我登陆后放到session中的哪种session范围的bean。

是否有其他解决方案

相关推荐

    springmvc session

    3. **Session scoped beans**: Spring 提供了 `@Scope("session")` 注解,允许你声明一个会话作用域的 Bean。这意味着每个用户的每次会话都有自己的 Bean 实例,而不是所有用户共享一个实例。这对于存储用户特定的...

    浅谈Spring学习之request,session与globalSession作用域

    在上面的示例中,userPreferences bean将在全局portlet Session中创建一个新的实例,该实例仅在portlet Session的生命周期范围内有效。请注意,如果在标准的基于Servlet的web应用中定义了一个或多个具有global ...

    Bean标签库,用法及实例说明

    该标签用于获取浏览器发送过来的Cookie信息,并将该信息封装到一个JavaBean中。例如: ```jsp &lt;bean:cookie id="sessionID" name="JSESSIONID" value="JSESSIONID-ISUNDEFINED" /&gt; ``` 此示例中,`sessionID`将被...

    Spring开发笔记

    Spring 是一个广泛使用的Java应用程序框架,它以依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)为核心,简化了Java应用的开发。以下是Spring框架的一些关键知识点: 1. ...

    spring_精简教程

    - **对象类型注入**:例如,将一个DAO Bean注入给Service Bean的相应属性。 2. **构造方法注入**:通过`&lt;constructor-arg&gt;`标签指定构造方法参数,实现依赖注入。 3. **自动装配**:Spring容器根据特定规则自动...

    spring 开发核心

    - **Singleton作用域**: 在Spring IoC容器中,一个Bean定义只有一个对象实例(单例模式)。这意味着每次从容器中获取同一ID的Bean时,都会返回同一个对象引用。 ```xml &lt;bean id="user" class=...

    JSF+spring+hibernate整合实例

    然后,我们有一个JSF的Managed Bean `User`,它包含一个`UserManager`的属性。在`User`类中,`setName()`方法调用了`userManager.getChangedName()`,这意味着我们需要将Spring管理的`UserManager`注入到JSF的...

    Spring注解@Scope原理及用法解析

    Spring 注解 @Scope 是 Spring IoC 容器中的一个作用域,用于定义 Bean 的生命周期和作用域。在 Spring 中,@Scope 注解可以用来定义 Bean 的实例化方式和生命周期。下面我们将详细介绍 @Scope 注解的原理和用法。 ...

    JSF技术总结文档.doc

    在这个配置中,`managed-bean-name`指定了Bean的名称,`managed-bean-class`指定了对应的类,而`managed-bean-scope`定义了Bean的作用域,可以是`request`、`session`或`application`。`request`作用域的Bean仅在...

    Spring框架

    - **定义**:依赖注入是IoC的一个具体实现,其核心思想是在运行时自动地将依赖项注入到组件中,而不是让组件自己负责依赖项的创建。 - **区别与联系**:虽然IoC和DI经常被当作同一个概念使用,但从技术角度来看,DI...

    spring注解使用详解

    当一个类上标注了此注解后,Spring会将其视为服务层Bean,并将其添加到应用上下文中。 - 示例: ```java @Service public class UserService { // ... } ``` 3. **`@Autowired`** - 用于依赖注入。可以放在...

    直接录入网址访问

    1. **创建`doFilter`类的实例**:在登录成功后,需要创建一个`doFilter`类的实例,并将其共享范围设为`session`。 ```jsp &lt;jsp:useBean id="mylogon" class="com.lh.dao.doFilter" scope="session"&gt; ``` 2. **...

    jsp常用标签

    UseBean 指令用于在 JSP 页面中创建一个 BEAN 实例并指定它的名字以及作用范围。语法:&lt;jsp:useBean id="name" scope="page | request | session | application" typeSpec /&gt; * typeSpec 有以下几种可能的情况:...

    Spring2.5_注解介绍(3.0通用).pdf

    - **`@Service`**:用于标记业务逻辑层服务组件。 - 示例: ```java @Service public class SoftCreateService { // ... } ``` - **`@Autowired`**:自动装配bean,通常用于注入依赖对象。 - 示例: ```...

    ssh+maven实现增删改查询

    例如,如果我们有一个用户表,可以创建一个`User.java`类,包含对应表字段的属性和getter/setter方法。 2. **DAO(Data Access Object)**:实现对数据库的操作,如增删改查。可以为每个实体类创建一个DAO接口和...

    JSP期末考试题.pdf

    若要使user对象在整个session中存在,直到session结束或被删除,`scope`属性应设置为`session`。 5)在J2EE中,JSP的隐式对象不包括`context`。常见的JSP隐式对象有`request`、`response`、`session`、`application...

    spring ioc的简单实例及bean的作用域属性解析

    &lt;span class="o"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;单例bean与多例bean的区别"&gt;单例bean与多例bean的区别&lt;/h3&gt;&lt;p&gt;单例bean在整个Spring容器中只存在一个实例,适合那些状态不变或无状态的对象,...

    Seam2.0GA 中文开发指南

    `User.java` 是一个实体Bean,用于表示应用中的用户信息。它通常包含了用户的属性(如用户名、密码等),并实现了相应的业务逻辑方法。 **1.2.1.2 无状态会话Bean:RegisterAction.java** `RegisterAction.java` ...

Global site tag (gtag.js) - Google Analytics