侧边栏壁纸
博主头像
个人资源站博主等级

行动起来,活在当下

  • 累计撰写 26 篇文章
  • 累计创建 13 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

PackageBasedActionConfigBuilder类主要方法的用途和参数说明

Administrator
2025-01-22 / 0 评论 / 0 点赞 / 14 阅读 / 13784 字

PackageBasedActionConfigBuilder 是 Struts 2 Convention 插件的核心类之一,负责扫描类路径中的 Action 类,并根据注解(如 @Action@Namespace 等)生成 Struts 2 的配置(ActionConfigPackageConfig)。以下是该类中主要方法的用途和参数说明:


1. 构造方法

public PackageBasedActionConfigBuilder(Configuration configuration, Container container, ObjectFactory objectFactory, String redirectToSlash, String defaultParentPackage)
  • 用途:初始化 PackageBasedActionConfigBuilder 实例。
  • 参数
    • configuration:Struts 2 的配置对象。
    • container:依赖注入容器。
    • objectFactory:用于创建 Action 实例的工厂。
    • redirectToSlash:是否将请求重定向到以斜杠结尾的 URL。
    • defaultParentPackage:默认的父包名。

2. buildActionConfigs()

public void buildActionConfigs()
  • 用途:扫描类路径中的 Action 类,并生成 Struts 2 的配置。
  • 流程
    1. 检查是否启用了 Action 扫描(disableActionScanning)。
    2. 调用 findActions() 方法查找所有符合条件的 Action 类。
    3. 调用 buildConfiguration() 方法生成配置。

3. findActions()

protected Set<Class> findActions()
  • 用途:查找所有符合条件的 Action 类。
  • 流程
    1. 根据 actionPackagespackageLocators 配置确定扫描的包路径。
    2. 使用 ClassFinder 扫描类路径中的类。
    3. 返回所有符合条件的 Action 类。

4. buildConfiguration(Set<Class> classes)

protected void buildConfiguration(Set<Class> classes)
  • 用途:根据扫描到的 Action 类生成 Struts 2 的配置。
  • 参数
    • classes:扫描到的 Action 类集合。
  • 流程
    1. 遍历每个 Action 类,解析其注解(如 @Action@Namespace 等)。
    2. 生成 ActionConfigPackageConfig,并将其添加到 Struts 2 的配置中。

5. getActionAnnotations(Class<?> actionClass)

protected Map<String, List<org.apache.struts2.convention.annotation.Action>> getActionAnnotations(Class<?> actionClass)
  • 用途:获取 Action 类中所有方法的 @Action 注解。
  • 参数
    • actionClass:要扫描的 Action 类。
  • 返回值:一个映射,键为方法名,值为该方法的 @Action 注解列表。

6. createActionConfig()

protected void createActionConfig(PackageConfig.Builder pkgCfg, Class<?> actionClass, String actionName, String actionMethod, org.apache.struts2.convention.annotation.Action annotation, Set<String> allowedMethods)
  • 用途:根据 Action 类和注解生成 ActionConfig
  • 参数
    • pkgCfg:当前包的配置构建器。
    • actionClass:Action 类。
    • actionName:Action 的名称。
    • actionMethod:Action 的方法名。
    • annotation@Action 注解。
    • allowedMethods:允许的方法集合。
  • 流程
    1. 根据注解生成 ActionConfig
    2. 添加拦截器和结果映射。
    3. ActionConfig 添加到包的配置中。

7. determineActionNamespace(Class<?> actionClass)

protected List<String> determineActionNamespace(Class<?> actionClass)
  • 用途:确定 Action 类的命名空间。
  • 参数
    • actionClass:Action 类。
  • 返回值:命名空间列表。

8. determineActionName(Class<?> actionClass)

protected String determineActionName(Class<?> actionClass)
  • 用途:确定 Action 类的名称。
  • 参数
    • actionClass:Action 类。
  • 返回值:Action 的名称。

9. getPackageConfig()

protected PackageConfig.Builder getPackageConfig(Map<String, PackageConfig.Builder> packageConfigs, String actionNamespace, String actionPackage, Class<?> actionClass, org.apache.struts2.convention.annotation.Action action)
  • 用途:获取或创建包的配置构建器。
  • 参数
    • packageConfigs:包配置构建器的映射。
    • actionNamespace:Action 的命名空间。
    • actionPackage:Action 的包名。
    • actionClass:Action 类。
    • action@Action 注解。
  • 返回值:包的配置构建器。

10. buildIndexActions()

protected void buildIndexActions(Map<String, PackageConfig.Builder> packageConfigs)
  • 用途:为每个命名空间创建默认的 index Action。
  • 参数
    • packageConfigs:包配置构建器的映射。

11. needsReload()

public boolean needsReload()
  • 用途:检查是否需要重新加载配置(用于开发模式)。
  • 返回值:如果需要重新加载,返回 true,否则返回 false

12. destroy()

public void destroy()
  • 用途:清理资源,释放加载的文件 URL。

13. initReloadClassLoader()

protected void initReloadClassLoader()
  • 用途:初始化重新加载类加载器(用于开发模式)。

14. getClassLoader()

protected ClassLoader getClassLoader()
  • 用途:获取当前线程的上下文类加载器。
  • 返回值:类加载器。

15. getClassLoaderInterface()

protected ClassLoaderInterface getClassLoaderInterface()
  • 用途:获取类加载器接口(用于扫描类路径)。
  • 返回值:类加载器接口。

16. isReloadEnabled()

protected boolean isReloadEnabled()
  • 用途:检查是否启用了重新加载功能(用于开发模式)。
  • 返回值:如果启用了重新加载,返回 true,否则返回 false

17. buildClassFinder()

protected ClassFinder buildClassFinder(Test<String> classPackageTest, List<URL> urls)
  • 用途:构建类查找器(ClassFinder),用于扫描类路径中的类。
  • 参数
    • classPackageTest:用于测试类包名的条件。
    • urls:类路径 URL 列表。
  • 返回值:类查找器。

18. readUrls()

private List<URL> readUrls() throws IOException
  • 用途:读取类路径中的 URL。
  • 返回值:URL 列表。

19. buildUrlSet()

private UrlSet buildUrlSet(List<URL> resourceUrls) throws IOException
  • 用途:构建 URL 集合,用于扫描类路径。
  • 参数
    • resourceUrls:资源 URL 列表。
  • 返回值:URL 集合。

20. includeClassNameInActionScan()

protected boolean includeClassNameInActionScan(String className)
  • 用途:检查类名是否符合扫描条件。
  • 参数
    • className:类名。
  • 返回值:如果符合条件,返回 true,否则返回 false

21. checkExcludePackages()

protected boolean checkExcludePackages(String classPackageName)
  • 用途:检查类包名是否在排除列表中。
  • 参数
    • classPackageName:类包名。
  • 返回值:如果不在排除列表中,返回 true,否则返回 false

22. checkActionPackages()

protected boolean checkActionPackages(String classPackageName)
  • 用途:检查类包名是否在 Action 包列表中。
  • 参数
    • classPackageName:类包名。
  • 返回值:如果在列表中,返回 true,否则返回 false

23. checkPackageLocators()

protected boolean checkPackageLocators(String classPackageName)
  • 用途:检查类包名是否符合包定位器的条件。
  • 参数
    • classPackageName:类包名。
  • 返回值:如果符合条件,返回 true,否则返回 false

总结

PackageBasedActionConfigBuilder 是 Struts 2 Convention 插件的核心类,负责扫描类路径中的 Action 类,并根据注解生成 Struts 2 的配置。它的主要方法包括扫描类路径、解析注解、生成配置等。通过这个类,Struts 2 可以自动注册 Action,而无需手动配置 struts.xml

0

评论区