Commit Graph

532 Commits

Author SHA1 Message Date
Sebastien Deleuze
87598f48e4 Introduce null-safety of Spring Framework API
This commit introduces 2 new @Nullable and @NonNullApi
annotations that leverage JSR 305 (dormant but available via
Findbugs jsr305 dependency and already used by libraries
like OkHttp) meta-annotations to specify explicitly
null-safety of Spring Framework parameters and return values.

In order to avoid adding too much annotations, the
default is set at package level with @NonNullApi and
@Nullable annotations are added when needed at parameter or
return value level. These annotations are intended to be used
on Spring Framework itself but also by other Spring projects.

@Nullable annotations have been introduced based on Javadoc
and search of patterns like "return null;". It is expected that
nullability of Spring Framework API will be polished with
complementary commits.

In practice, this will make the whole Spring Framework API
null-safe for Kotlin projects (when KT-10942 will be fixed)
since Kotlin will be able to leverage these annotations to
know if a parameter or a return value is nullable or not. But
this is also useful for Java developers as well since IntelliJ
IDEA, for example, also understands these annotations to
generate warnings when unsafe nullable usages are detected.

Issue: SPR-15540
2017-05-27 08:57:01 +02:00
Juergen Hoeller
f985f71daf Polishing 2017-05-12 12:50:17 +02:00
Juergen Hoeller
652266bcc2 Polishing 2017-05-04 22:27:36 +02:00
Juergen Hoeller
27057889f8 Polishing 2017-05-03 13:45:29 +02:00
Juergen Hoeller
d74542ed21 Honor @Autowired(required=false) at parameter level
Includes a revision of the AutowireCandidateResolver SPI with default methods.

Issue: SPR-15268
2017-05-03 13:42:16 +02:00
Stephane Nicoll
1b9e12f52f Polish "Use Java 8 forEach method on Map"
Closes gh-1404
2017-04-28 11:07:08 +02:00
Jon Borenstein
13dc0cd828 Use Java 8 forEach method on Map 2017-04-28 11:07:08 +02:00
Juergen Hoeller
c668d9a473 Polishing 2017-04-26 18:20:19 +02:00
Juergen Hoeller
a95843a068 Dependency tracking for Supplier-created beans
Issue: SPR-15417
2017-04-07 18:01:28 +02:00
Sam Brannen
7a01771a45 Polishing 2017-03-28 19:27:03 +02:00
stonio
7d062df992 Use String#isEmpty()
Closes gh-1335
2017-02-22 11:55:17 +01:00
Juergen Hoeller
8d707eb530 Polishing 2017-02-16 15:37:31 +01:00
Kazuki Miyahara
e95391765c Fix typo in Javadoc 2017-02-16 18:22:44 +09:00
Stephane Nicoll
d4dd8baed5 Update copyright header
Closes gh-1327
2017-02-14 10:39:54 +01:00
hengyunabc
2723bd092c Fix typo
See gh-1327
2017-02-14 10:36:14 +01:00
Juergen Hoeller
1b2dc3638f Revisit Assert to avoid single-arg assert methods (with refined messages)
Issue: SPR-15196
2017-01-30 22:15:55 +01:00
Juergen Hoeller
4a57d4512e Reset cached ResolvableType on increaseNestingLevel/setContainingClass
Issue: SPR-15160
2017-01-25 00:30:05 +01:00
Juergen Hoeller
5e946c2700 Consistent type variable resolution for arrays/collections (in particular at field level)
Dropping GenericCollectionTypeResolver in favor of direct ResolvableType usage.

Issue: SPR-15160
2017-01-24 18:00:17 +01:00
Juergen Hoeller
ed40b1c8ee Remove outdated abstractions/delegates from core/util
Issue: SPR-15159
2017-01-23 13:41:55 +01:00
Juergen Hoeller
ac6aa53031 Drop outdated BeanFactoryLocator / beanRefContext.xml mechanism
Issue: SPR-15154
2017-01-17 13:58:37 +01:00
Juergen Hoeller
46fc7fba8f Polishing 2017-01-16 23:08:44 +01:00
Juergen Hoeller
32fc855dd1 Introspect FactoryBean class declaration if no early instantiation possible
Issue: SPR-15125
2017-01-16 12:00:38 +01:00
Juergen Hoeller
8084da59a7 Map resolution for multiple beans applies to plain Map interface declaration only
Issue: SPR-15117
2017-01-12 21:15:41 +01:00
Juergen Hoeller
9e6aa0ff59 BeanDefinitionBuilder supports factory method on factory bean
Issue: SPR-15098
2017-01-12 21:15:22 +01:00
Juergen Hoeller
e8a082fbe1 Clarified setAutowireCandidate semantics (plus attribute reordering in BeanDefinition)
Issue: SPR-15072
2016-12-30 11:30:18 +01:00
Juergen Hoeller
fc629bb508 Polishing 2016-12-29 22:39:36 +01:00
Juergen Hoeller
edc62be231 @Scheduled reliably applies after other post-processors and shuts down before TaskScheduler
Issue: SPR-14692
Issue: SPR-15067
2016-12-29 22:35:10 +01:00
Juergen Hoeller
209e7a700d Avoid FactoryBean initialization on isSingleton check for decorated bean definition
Issue: SPR-14892
Issue: SPR-15042
2016-12-28 17:27:06 +01:00
Juergen Hoeller
64d6561cbb AbstractNestablePropertyAccessor's setPropertyValue refactored into several delegate methods
Issue: SPR-15053
2016-12-26 19:47:26 +01:00
Juergen Hoeller
f805427629 Detect generic type match behind interface-based proxy as well
Issue: SPR-14097
2016-12-26 11:23:07 +01:00
Juergen Hoeller
fd41f63ec0 Clarify programmatic contract (no annotation-driven injection)
Issue: SPR-8704
2016-12-26 10:57:50 +01:00
Juergen Hoeller
d3f97e3092 ObjectProvider offers getIfAvailable/getIfUnique variants with default supplier
Issue: SPR-14980
2016-12-23 18:49:12 +01:00
Juergen Hoeller
e788b8467d GenericApplicationContext offers Supplier-based registration with BeanDefinitionCustomizer callback
Issue: SPR-14832
2016-12-23 12:26:47 +01:00
Juergen Hoeller
154ef8bf10 Polishing 2016-12-20 19:57:52 +01:00
Juergen Hoeller
3ee6286eb5 Support for functional instance supplier callback at BeanDefinition level
Issue: SPR-14832
2016-12-18 21:05:45 +01:00
Juergen Hoeller
12aa14ddbc Support @Nullable annotations as indicators for optional injection points
Issue: SPR-15028
2016-12-18 21:04:08 +01:00
Juergen Hoeller
4c005e6336 ResolvableType-based matching respects generic factory method return type
Includes consistent use of ResolvableType.resolve() wherever applicable.

Issue: SPR-15011
2016-12-17 23:10:48 +01:00
Juergen Hoeller
39d2769bd0 Autodetect Kotlin nullability for optional injection points (analogous to java.util.Optional)
Built-in support in MethodParameter and DependencyDescriptor supersedes our separate KotlinUtils helper.

Issue: SPR-14951
2016-12-13 17:38:58 +01:00
Juergen Hoeller
8b5ee4ef91 AutowiredAnnotationBeanPostProcessor tolerates annotated no-arg constructors
Issue: SPR-15005
2016-12-12 22:26:24 +01:00
Juergen Hoeller
547b9638dc Collection injection may refer back to factory methods on same bean again
Issue: SPR-14996
2016-12-09 23:09:10 +01:00
Juergen Hoeller
ac5933a7ac Various DefaultListableBeanFactory clarifications
* getBeanDefinitionNames defensively returns a copy of the bean definition names array.
* copyConfigurationFrom provides an independent AutowireCandidateResolver instance and copies a ConversionService and dependency comparator configuration as well.
* findAutowireCandidates only considers a self reference fallback for direct dependency declarations, not as a collection element.

Issue: SPR-14897
Issue: SPR-14921
Issue: SPR-14965
2016-11-30 22:07:55 +01:00
Juergen Hoeller
b22a59a0c4 Polishing 2016-11-24 15:32:06 +01:00
Juergen Hoeller
85b0ce1ef7 Avoid defensive checks against java.time API
Issue: SPR-13188
2016-11-22 14:55:03 +01:00
Juergen Hoeller
da63898d5f Polishing 2016-11-21 17:36:04 +01:00
Juergen Hoeller
b3cd1ad7f1 Refined throwing of BeanCreationExceptions (and reflection exceptions)
Issue: SPR-14883
2016-11-07 19:03:18 +01:00
Juergen Hoeller
cf479bf893 Consistent throwing of BeanCreationExceptions (and reflection exceptions)
Issue: SPR-14883
(cherry picked from commit b42d731)
2016-11-07 18:00:21 +01:00
Juergen Hoeller
8053fefea8 Consistent support for early placeholder resolution in properties locations
Issue: SPR-10502
2016-11-03 14:33:48 +01:00
Juergen Hoeller
dc080cb1be Revised NoSuchBeanDefinitionException message and ResolvableType handling
Includes consistent quoting of qualified type names in related classes.

Issue: SPR-14831
2016-10-28 23:39:05 +02:00
Juergen Hoeller
36332441ae DefaultListableBeanFactory allows early type matching against ScopedProxyFactoryBean
Issue: SPR-14816
2016-10-28 23:37:58 +02:00
Juergen Hoeller
20419d72ef Tightened StringValueResolver contract
Issue: SPR-14842
2016-10-28 15:28:42 +02:00