1.web层(action)
StrutsAction类:
java 代码
- public class StrutsAction extends DispatchAction
继承了分发Action类,在StrutsAction里还做了几个重要处理
A:设置Struts 中数字<->字符串转换
B:Object和Form之间的copyProperties
C:Save出错的Message
StrutsEntityAction类:这个类是供具体的实体Action来继承的
java 代码
- public abstract class StrutsEntityAction < T, M extends EntityDao < T > >
- extends StrutsAction implements InitializingBean
因为implements了InitializingBean类,所以需要实现方法:afterPropertiesSet
java 代码
-
-
-
- public void afterPropertiesSet() {
-
- entityClass = GenericsUtils.getSuperClassGenricType(getClass());
-
-
- List < Field > fields = BeanUtils.getFieldsByType(this, GenericsUtils.getSuperClassGenricType(getClass(), 1));
- Assert.isTrue(fields.size() == 1, "subclass's has not only one entity manager property.");
- try {
- entityManager = (M) BeanUtils.forceGetProperty(this, fields.get(0).getName());
- Assert.notNull(entityManager, "subclass not inject manager to action sucessful.");
- } catch (Exception e) {
- ReflectionUtils.handleReflectionException(e);
- }
-
-
- try {
- idName = entityManager.getIdName(entityClass);
- idClass = BeanUtils.getPropertyType(entityClass, idName);
- } catch (Exception e) {
- ReflectionUtils.handleReflectionException(e);
- }
- }
具体看下上面这段代码:
java 代码
- entityClass = GenericsUtils.getSuperClassGenricType(getClass());
这个和HibernateEntityDao里根据T,运用反射获得实际绑定entityClass(实体类)是一样的。
java 代码
- List < Field > fields = BeanUtils.getFieldsByType(this, GenericsUtils.getSuperClassGenricType(getClass(), 1));
这句代码里GenericsUtils.getSuperClassGenricType(getClass(), 1)获得实体Action传递过来的第2个泛型参数.比如:UserManager.class
然后又调用BeanUtils里的getFieldsByType方法。该方法具体为:
java 代码
-
-
-
- public static List< Field > getFieldsByType(Object object, Class type) {
- List< Field > list = new ArrayList< Field >();
- Field[] fields = object.getClass().getDeclaredFields();
- for (Field field : fields) {
- System.out.println(field.getType() + ":" + field.getName());
- if (field.getType().isAssignableFrom(type)) {
- list.add(field);
- }
- }
- return list;
- }
这段代码也就是根据传递进来的Class类型,获得用该类型定义的变量的列表List,也就是在具体的某个实体Action里,用该实体Manager定义的具体实例变量的一个List,比如:UserAction里用UserManager定义的实例变量的列表
继续看StrutsEntityAction里的afterPropertiesSet方法
java 代码
- entityManager = ( M ) BeanUtils.forceGetProperty(this, fields.get(0).getName());
java 代码
-
-
-
-
-
- public static Object forceGetProperty(Object object, String propertyName) throws NoSuchFieldException {
- Assert.notNull(object);
- Assert.hasText(propertyName);
-
- Field field = getDeclaredField(object, propertyName);
-
- boolean accessible = field.isAccessible();
- field.setAccessible(true);
-
- Object result = null;
- try {
- result = field.get(object);
- } catch (IllegalAccessException e) {
- logger.info("error wont' happen");
- }
- field.setAccessible(accessible);
- return result;
- }
暴力获得某个实体Action里定义的实体Manager的 实例变量,并把该变量赋值给StrutsEntityAction里的entityManager
分享到:
相关推荐
二、Spring 集成与配置 SpringSide 使用了 Spring Framework 进行应用构建,通过 XML 和注解的方式进行配置。源码中可以看到 Spring 的依赖注入(DI)和面向切面编程(AOP)的广泛应用,以及对 SpringMVC、Spring ...
这些部分讲述了如何进行动态组合查询条件、使用Hibernate二级缓存、以及如何配置数据源和事务管理。 为了提升性能,文档介绍了各种缓存技术,包括Ehcache、Guava Cache以及分布式缓存的实现。还提到了如何在Ehcache...
二、SpringSide-core-4.1.0关键组件 1. **依赖管理**:SpringSide-core-4.1.0对常用的第三方库进行了严格的版本控制,确保了项目的一致性和稳定性。这包括Spring框架、Hibernate ORM、MyBatis等,这些依赖的版本都...
2. **依赖管理**:springside使用Maven进行依赖管理,通过预定义的配置文件,开发者可以快速导入所需的库,避免了手动管理jar包的繁琐过程。 3. **代码规范**:springside遵循Java编码最佳实践,如使用Checkstyle和...
2. **Maven集成**:SpringSide 3.0 使用Maven作为构建工具,提供了标准的项目结构和配置,使得项目的构建、依赖管理和部署变得更加简单。通过Maven的POM.xml文件,开发者可以轻松管理项目的所有依赖库。 3. **...
2. **最佳实践**:SpringSide定义了一套开发规范,包括命名规则、代码风格、测试策略等,有助于提升团队间的协作效率和代码质量。 3. **示例代码**:SpringSide提供了丰富的示例代码,涵盖了Spring Framework的各种...
pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true
#### 二、环境配置与准备 1. **安装Java JDK**: - 首先确保已经安装了Java环境,并且设置好`JAVA_HOME`环境变量。 - 推荐使用JDK 1.6以上版本,因为Springside 3.3.4支持Java 1.6及更高版本。 2. **安装Apache ...
2. **Demo**:示例模块,提供了各种应用场景的实例,帮助开发者快速理解和使用SpringSide的各项功能,包括数据库操作、RESTful API开发、Maven构建等。 3. **Module**:模块化设计,SpringSide提供了多个可复用的子...
《SpringSide框架详解:整合Spring、Hibernate与Struts2的高效解决方案》 SpringSide框架,作为一款基于Java的开源企业级应用开发框架,是开发者们为了简化开发流程、提高开发效率而精心设计的。它巧妙地融合了...
二、生成 mini-web 项目模板 在 SpringSide3.3.4 安装部署的过程中,我们需要生成 mini-web 项目模板。这个模板将作为我们后续开发的基础。我们可以使用 Maven 的 archetype 机制来生成这个模板。首先,我们需要在...
二、springside-parent:父项目配置 springside-parent作为项目的父POM,包含了项目构建的基础配置,如Maven插件、依赖管理等。它统一了项目的编码规范和构建流程,使得团队成员能更高效地协同开发。 三、...
"ssh3.3"这个文件名暗示了SpringSide 3.3可能集成了Struts2、Hibernate和Spring,也就是常说的SSH框架。这三个框架的整合能够实现高效的MVC开发,Struts2处理请求和展示视图,Hibernate负责持久化操作,Spring则...
SpringSide文档.chm。
2. **配置文件**:包括Spring的XML配置文件和基于Java的配置,展示了如何灵活地配置Spring应用,以及如何利用 Profiles 实现环境的切换。 3. **文档**:SpringSide通常会附带详细的文档,解释每个示例的意图、工作...
2. **配置管理**:Springside提供了一套统一的配置管理方案,使得Spring的配置更加简洁和清晰,减少了配置文件的冗余和错误。 3. **代码生成器**:通过内置的代码生成器,可以快速生成基于DAO、Service、Controller...
二、springside3源码分析 1. **源码结构**:源码主要分布在src/main/java和src/test/java目录下。前者包含业务逻辑和组件实现,后者则包含单元测试代码。每个模块都有清晰的包结构,遵循单一职责原则,使得代码...
《SpringSide 4:Spring MVC 实战展示》 在IT领域,SpringSide 4是一个备受推崇的开源项目,它是一个全面展示Spring框架及其生态系统的实战示例。标题"Springside4 (showcase)"暗示了这是一个以展示SpringSide 4...
2. Spring配置优化:此版本进一步优化了Spring的配置,引入了更多的自动配置和Java配置,降低了XML配置的复杂性。 3. AOP增强:对AspectJ的深度集成,使得切面编程更为便捷,提高了代码的可维护性和模块化。 4. ...
二、依赖注入 依赖注入是Spring框架的核心,它解决了对象之间的耦合问题,降低了代码的复杂度。在SpringSide3中,你会了解到如何通过XML配置或注解方式实现依赖注入,以及如何使用ApplicationContext管理bean。 三...