Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,45 @@ sure that they are 'opened' (that is, that they use an `opens` declaration inste
`exports` declaration in your `module-info` descriptor).
====

==== Property placeholders and Ant-style patterns
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please note that this breaks the build.

[16:49:49.179] WARN (asciidoctor): section title out of sequence: expected level 2, got level 3
    file: /XXX/spring-framework/framework-docs/modules/ROOT/pages/core/beans/classpath-scanning.adoc:335

However, I have addressed this locally, thus there is no need to update this PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For future reference, please note that we do our best to introduce custom anchors that align with other anchors used in the same file.

For example, I've added the following that I will apply after merging this PR.

[[beans-scanning-placeholders-and-patterns]]


`@ComponentScan(basePackages)` supports `${…}` property placeholders resolved
against the `Environment` and Ant-style package patterns such as `com.example.**`.
Multiple packages and/or patterns may be specified.

[tabs]
======
Java::
+
[source,java,indent=0,subs="verbatim,quotes"]
----
@Configuration
@ComponentScan(basePackages = "${app.scan.packages}")
public class AppConfig {
// ...
}
----

Kotlin::
+
[source,kotlin,indent=0,subs="verbatim,quotes"]
----
@Configuration
@ComponentScan(basePackages = ["\${app.scan.packages}"])
class AppConfig {
// ...
}
----
======

[source,properties,indent=0,subs="verbatim,quotes"]
----
app.scan.packages=com.example.**,org.acme.*
----

NOTE: Ant-style patterns do not apply to `basePackageClasses`, which accepts concrete
classes and derives packages from those classes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI: the following paragraph and note belong to the previous section about XML configuration.

However, I have addressed this locally, thus there is no need to update this PR.

Furthermore, the `AutowiredAnnotationBeanPostProcessor` and
`CommonAnnotationBeanPostProcessor` are both implicitly included when you use the
component-scan element. That means that the two components are autodetected and
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@
* <p>Allows for more concise annotation declarations if no other attributes
* are needed &mdash; for example, {@code @ComponentScan("org.my.pkg")}
* instead of {@code @ComponentScan(basePackages = "org.my.pkg")}.
* <p>This attribute has the same semantics as {@link #basePackages}, including
* support for {@code ${...}} placeholders (resolved against the
* {@link org.springframework.core.env.Environment Environment}) and
* Ant-style package patterns (for example, {@code com.example.**}).
*/
@AliasFor("basePackages")
String[] value() default {};
Expand All @@ -86,6 +90,13 @@
* attribute.
* <p>Use {@link #basePackageClasses} for a type-safe alternative to
* String-based package names.
* <p>Supports {@code ${...}} placeholders resolved against the
* {@link org.springframework.core.env.Environment Environment} as well as
* Ant-style package patterns (for example, {@code com.example.**}).
* Multiple packages and/or patterns may be specified.
* <p><strong>Note:</strong> Ant-style patterns are <em>not</em> applicable to
* {@link #basePackageClasses()}, which accepts concrete classes for type-safe
* package selection.
Comment on lines +97 to +99
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think there is any need to point this out, since one can only supply Class references via the basePackageClasses attribute.

Thus, I have removed this and other such text locally.

*/
@AliasFor("value")
String[] basePackages() default {};
Expand All @@ -95,6 +106,8 @@
* to scan for annotated components. The package of each class specified will be scanned.
* <p>Consider creating a special no-op marker class or interface in each package
* that serves no purpose other than being referenced by this attribute.
* <p><strong>Note:</strong> Ant-style package patterns do not apply here; this
* attribute accepts concrete classes only and derives packages from those classes.
*/
Class<?>[] basePackageClasses() default {};

Expand Down
Loading