老系统移植到基于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("合同审核时发生异常");
}
}
}
-----------------------------------------------------------
不知
分享到:
相关推荐
3. **Session scoped beans**: Spring 提供了 `@Scope("session")` 注解,允许你声明一个会话作用域的 Bean。这意味着每个用户的每次会话都有自己的 Bean 实例,而不是所有用户共享一个实例。这对于存储用户特定的...
在上面的示例中,userPreferences bean将在全局portlet Session中创建一个新的实例,该实例仅在portlet Session的生命周期范围内有效。请注意,如果在标准的基于Servlet的web应用中定义了一个或多个具有global ...
该标签用于获取浏览器发送过来的Cookie信息,并将该信息封装到一个JavaBean中。例如: ```jsp <bean:cookie id="sessionID" name="JSESSIONID" value="JSESSIONID-ISUNDEFINED" /> ``` 此示例中,`sessionID`将被...
Spring 是一个广泛使用的Java应用程序框架,它以依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)为核心,简化了Java应用的开发。以下是Spring框架的一些关键知识点: 1. ...
- **对象类型注入**:例如,将一个DAO Bean注入给Service Bean的相应属性。 2. **构造方法注入**:通过`<constructor-arg>`标签指定构造方法参数,实现依赖注入。 3. **自动装配**:Spring容器根据特定规则自动...
- **Singleton作用域**: 在Spring IoC容器中,一个Bean定义只有一个对象实例(单例模式)。这意味着每次从容器中获取同一ID的Bean时,都会返回同一个对象引用。 ```xml <bean id="user" class=...
然后,我们有一个JSF的Managed Bean `User`,它包含一个`UserManager`的属性。在`User`类中,`setName()`方法调用了`userManager.getChangedName()`,这意味着我们需要将Spring管理的`UserManager`注入到JSF的...
Spring 注解 @Scope 是 Spring IoC 容器中的一个作用域,用于定义 Bean 的生命周期和作用域。在 Spring 中,@Scope 注解可以用来定义 Bean 的实例化方式和生命周期。下面我们将详细介绍 @Scope 注解的原理和用法。 ...
在这个配置中,`managed-bean-name`指定了Bean的名称,`managed-bean-class`指定了对应的类,而`managed-bean-scope`定义了Bean的作用域,可以是`request`、`session`或`application`。`request`作用域的Bean仅在...
- **定义**:依赖注入是IoC的一个具体实现,其核心思想是在运行时自动地将依赖项注入到组件中,而不是让组件自己负责依赖项的创建。 - **区别与联系**:虽然IoC和DI经常被当作同一个概念使用,但从技术角度来看,DI...
当一个类上标注了此注解后,Spring会将其视为服务层Bean,并将其添加到应用上下文中。 - 示例: ```java @Service public class UserService { // ... } ``` 3. **`@Autowired`** - 用于依赖注入。可以放在...
1. **创建`doFilter`类的实例**:在登录成功后,需要创建一个`doFilter`类的实例,并将其共享范围设为`session`。 ```jsp <jsp:useBean id="mylogon" class="com.lh.dao.doFilter" scope="session"> ``` 2. **...
UseBean 指令用于在 JSP 页面中创建一个 BEAN 实例并指定它的名字以及作用范围。语法:<jsp:useBean id="name" scope="page | request | session | application" typeSpec /> * typeSpec 有以下几种可能的情况:...
- **`@Service`**:用于标记业务逻辑层服务组件。 - 示例: ```java @Service public class SoftCreateService { // ... } ``` - **`@Autowired`**:自动装配bean,通常用于注入依赖对象。 - 示例: ```...
例如,如果我们有一个用户表,可以创建一个`User.java`类,包含对应表字段的属性和getter/setter方法。 2. **DAO(Data Access Object)**:实现对数据库的操作,如增删改查。可以为每个实体类创建一个DAO接口和...
若要使user对象在整个session中存在,直到session结束或被删除,`scope`属性应设置为`session`。 5)在J2EE中,JSP的隐式对象不包括`context`。常见的JSP隐式对象有`request`、`response`、`session`、`application...
<span class="o">}</span></code></pre></td></tr></table></div></div>单例bean与多例bean的区别">单例bean与多例bean的区别</h3><p>单例bean在整个Spring容器中只存在一个实例,适合那些状态不变或无状态的对象,...
`User.java` 是一个实体Bean,用于表示应用中的用户信息。它通常包含了用户的属性(如用户名、密码等),并实现了相应的业务逻辑方法。 **1.2.1.2 无状态会话Bean:RegisterAction.java** `RegisterAction.java` ...