315.2.4. 使用 <packageScan>
在 Camel 2.0 中,这个问题已被解决,允许使用 Ant (如路径匹配)有选择性包含和排除发现的路由类。在 spring 中,这通过添加 <packageScan/> 标签来指定。标签必须包含一个或多个 'package' 元素(类似于 1.x),以及可选的一个或多个 'includes' 元素,指定要应用到所发现类的完全限定域名的模式。例如:
<camelContext xmlns="http://camel.apache.org/schema/spring"> <packageScan> <package>org.example.routes</package> <excludes>**.*Excluded*</excludes> <includes>**.*</includes> </packageScan> </camelContext>
排除的模式在包括模式前应用。如果没有定义 include 或 exclude 模式,则返回软件包中发现的所有 Route 类。
在上例中,camel 将扫描所有 'org.example.routes' 软件包和 RouteBuilder 类的任何子软件包。说明扫描会找到两个 RouteBuilders,一个位于 org.example.routes 中名为"MyRoute",另一个名为"MyExcludedRoute" (子软件包")。提取每个类的完全限定名称(org.example.routes.MyRoute, org.example.routes.excluded.MyExcludedRoute),同时应用 include 和 exclude 模式。
exclude pattern *.*Excluded 将与 fqcn 'org.example.routes.excluded.MyExcludedRoute' 和 veto camel 从初始化它匹配。
在介绍的下面,这使用 Spring 的 AntPatternMatcher 实施,其匹配如下
? matches one character * matches zero or more characters ** matches zero or more segments of a fully qualified name
例如:
*.*excluded 会与 org.simple.Excluded, org.apache.camel.SomeExcludedRoute 或 org.example.RouteWhichIsExcluded
*.?cluded 将与 org.simple.IncludedRoute 和 org.simple.ExcludedRoute 匹配 org.simple.PrecludedRoute