Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
4b98fa7d
Commit
4b98fa7d
authored
Mar 12, 2019
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Alias proxyBeanMethods on annotations meta-annotated with @Configuration
Closes gh-16201
parent
dfead885
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
267 additions
and
3 deletions
+267
-3
ManagementContextConfiguration.java
...ate/autoconfigure/web/ManagementContextConfiguration.java
+28
-1
ManagementContextConfigurationTests.java
...utoconfigure/web/ManagementContextConfigurationTests.java
+61
-0
SpringBootApplication.java
...ngframework/boot/autoconfigure/SpringBootApplication.java
+27
-1
SpringBootApplicationTests.java
...mework/boot/autoconfigure/SpringBootApplicationTests.java
+61
-0
SpringBootConfiguration.java
...ava/org/springframework/boot/SpringBootConfiguration.java
+29
-1
SpringBootConfigurationTests.java
...rg/springframework/boot/SpringBootConfigurationTests.java
+61
-0
No files found.
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfiguration.java
View file @
4b98fa7d
/*
/*
* Copyright 2012-201
7
the original author or authors.
* Copyright 2012-201
9
the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
...
@@ -22,8 +22,10 @@ import java.lang.annotation.Retention;
...
@@ -22,8 +22,10 @@ import java.lang.annotation.Retention;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
import
java.lang.annotation.Target
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.annotation.AliasFor
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.core.annotation.Order
;
/**
/**
...
@@ -54,4 +56,29 @@ public @interface ManagementContextConfiguration {
...
@@ -54,4 +56,29 @@ public @interface ManagementContextConfiguration {
*/
*/
ManagementContextType
value
()
default
ManagementContextType
.
ANY
;
ManagementContextType
value
()
default
ManagementContextType
.
ANY
;
/**
* Specify whether {@link Bean @Bean} methods should get proxied in order to enforce
* bean lifecycle behavior, e.g. to return shared singleton bean instances even in
* case of direct {@code @Bean} method calls in user code. This feature requires
* method interception, implemented through a runtime-generated CGLIB subclass which
* comes with limitations such as the configuration class and its methods not being
* allowed to declare {@code final}.
* <p>
* The default is {@code true}, allowing for 'inter-bean references' within the
* configuration class as well as for external calls to this configuration's
* {@code @Bean} methods, e.g. from another configuration class. If this is not needed
* since each of this particular configuration's {@code @Bean} methods is
* self-contained and designed as a plain factory method for container use, switch
* this flag to {@code false} in order to avoid CGLIB subclass processing.
* <p>
* Turning off bean method interception effectively processes {@code @Bean} methods
* individually like when declared on non-{@code @Configuration} classes, a.k.a.
* "@Bean Lite Mode" (see {@link Bean @Bean's javadoc}). It is therefore behaviorally
* equivalent to removing the {@code @Configuration} stereotype.
* @return whether to proxy {@code @Bean} methods
* @since 2.2
*/
@AliasFor
(
annotation
=
Configuration
.
class
)
boolean
proxyBeanMethods
()
default
true
;
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfigurationTests.java
0 → 100644
View file @
4b98fa7d
/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
.
web
;
import
org.junit.Test
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.AnnotatedElementUtils
;
import
org.springframework.core.annotation.AnnotationAttributes
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link ManagementContextConfiguration @ManagementContextConfiguration}.
*
* @author Andy Wilkinson
*/
public
class
ManagementContextConfigurationTests
{
@Test
public
void
proxyBeanMethodsIsEnabledByDefault
()
{
AnnotationAttributes
attributes
=
AnnotatedElementUtils
.
getMergedAnnotationAttributes
(
DefaultManagementContextConfiguration
.
class
,
Configuration
.
class
);
assertThat
(
attributes
.
get
(
"proxyBeanMethods"
)).
isEqualTo
(
true
);
}
@Test
public
void
proxyBeanMethodsCanBeDisabled
()
{
AnnotationAttributes
attributes
=
AnnotatedElementUtils
.
getMergedAnnotationAttributes
(
NoBeanMethodProxyingManagementContextConfiguration
.
class
,
Configuration
.
class
);
assertThat
(
attributes
.
get
(
"proxyBeanMethods"
)).
isEqualTo
(
false
);
}
@ManagementContextConfiguration
private
static
class
DefaultManagementContextConfiguration
{
}
@ManagementContextConfiguration
(
proxyBeanMethods
=
false
)
private
static
class
NoBeanMethodProxyingManagementContextConfiguration
{
}
}
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/SpringBootApplication.java
View file @
4b98fa7d
/*
/*
* Copyright 2012-201
7
the original author or authors.
* Copyright 2012-201
9
the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
...
@@ -41,6 +41,7 @@ import org.springframework.core.annotation.AliasFor;
...
@@ -41,6 +41,7 @@ import org.springframework.core.annotation.AliasFor;
*
*
* @author Phillip Webb
* @author Phillip Webb
* @author Stephane Nicoll
* @author Stephane Nicoll
* @author Andy Wilkinson
* @since 1.2.0
* @since 1.2.0
*/
*/
@Target
(
ElementType
.
TYPE
)
@Target
(
ElementType
.
TYPE
)
...
@@ -91,4 +92,29 @@ public @interface SpringBootApplication {
...
@@ -91,4 +92,29 @@ public @interface SpringBootApplication {
@AliasFor
(
annotation
=
ComponentScan
.
class
,
attribute
=
"basePackageClasses"
)
@AliasFor
(
annotation
=
ComponentScan
.
class
,
attribute
=
"basePackageClasses"
)
Class
<?>[]
scanBasePackageClasses
()
default
{};
Class
<?>[]
scanBasePackageClasses
()
default
{};
/**
* Specify whether {@link Bean @Bean} methods should get proxied in order to enforce
* bean lifecycle behavior, e.g. to return shared singleton bean instances even in
* case of direct {@code @Bean} method calls in user code. This feature requires
* method interception, implemented through a runtime-generated CGLIB subclass which
* comes with limitations such as the configuration class and its methods not being
* allowed to declare {@code final}.
* <p>
* The default is {@code true}, allowing for 'inter-bean references' within the
* configuration class as well as for external calls to this configuration's
* {@code @Bean} methods, e.g. from another configuration class. If this is not needed
* since each of this particular configuration's {@code @Bean} methods is
* self-contained and designed as a plain factory method for container use, switch
* this flag to {@code false} in order to avoid CGLIB subclass processing.
* <p>
* Turning off bean method interception effectively processes {@code @Bean} methods
* individually like when declared on non-{@code @Configuration} classes, a.k.a.
* "@Bean Lite Mode" (see {@link Bean @Bean's javadoc}). It is therefore behaviorally
* equivalent to removing the {@code @Configuration} stereotype.
* @since 2.2
* @return whether to proxy {@code @Bean} methods
*/
@AliasFor
(
annotation
=
Configuration
.
class
)
boolean
proxyBeanMethods
()
default
true
;
}
}
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/SpringBootApplicationTests.java
0 → 100644
View file @
4b98fa7d
/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
autoconfigure
;
import
org.junit.Test
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.AnnotatedElementUtils
;
import
org.springframework.core.annotation.AnnotationAttributes
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link SpringBootApplication @SpringBootApplication}.
*
* @author Andy Wilkinson
*/
public
class
SpringBootApplicationTests
{
@Test
public
void
proxyBeanMethodsIsEnabledByDefault
()
{
AnnotationAttributes
attributes
=
AnnotatedElementUtils
.
getMergedAnnotationAttributes
(
DefaultSpringBootApplication
.
class
,
Configuration
.
class
);
assertThat
(
attributes
.
get
(
"proxyBeanMethods"
)).
isEqualTo
(
true
);
}
@Test
public
void
proxyBeanMethodsCanBeDisabled
()
{
AnnotationAttributes
attributes
=
AnnotatedElementUtils
.
getMergedAnnotationAttributes
(
NoBeanMethodProxyingSpringBootApplication
.
class
,
Configuration
.
class
);
assertThat
(
attributes
.
get
(
"proxyBeanMethods"
)).
isEqualTo
(
false
);
}
@SpringBootApplication
private
static
class
DefaultSpringBootApplication
{
}
@SpringBootApplication
(
proxyBeanMethods
=
false
)
private
static
class
NoBeanMethodProxyingSpringBootApplication
{
}
}
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringBootConfiguration.java
View file @
4b98fa7d
/*
/*
* Copyright 2012-201
7
the original author or authors.
* Copyright 2012-201
9
the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
...
@@ -22,7 +22,9 @@ import java.lang.annotation.Retention;
...
@@ -22,7 +22,9 @@ import java.lang.annotation.Retention;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
import
java.lang.annotation.Target
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.AliasFor
;
/**
/**
* Indicates that a class provides Spring Boot application
* Indicates that a class provides Spring Boot application
...
@@ -35,6 +37,7 @@ import org.springframework.context.annotation.Configuration;
...
@@ -35,6 +37,7 @@ import org.springframework.context.annotation.Configuration;
* {@code @SpringBootApplication}.
* {@code @SpringBootApplication}.
*
*
* @author Phillip Webb
* @author Phillip Webb
* @author Andy Wilkinson
* @since 1.4.0
* @since 1.4.0
*/
*/
@Target
(
ElementType
.
TYPE
)
@Target
(
ElementType
.
TYPE
)
...
@@ -43,4 +46,29 @@ import org.springframework.context.annotation.Configuration;
...
@@ -43,4 +46,29 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@Configuration
public
@interface
SpringBootConfiguration
{
public
@interface
SpringBootConfiguration
{
/**
* Specify whether {@link Bean @Bean} methods should get proxied in order to enforce
* bean lifecycle behavior, e.g. to return shared singleton bean instances even in
* case of direct {@code @Bean} method calls in user code. This feature requires
* method interception, implemented through a runtime-generated CGLIB subclass which
* comes with limitations such as the configuration class and its methods not being
* allowed to declare {@code final}.
* <p>
* The default is {@code true}, allowing for 'inter-bean references' within the
* configuration class as well as for external calls to this configuration's
* {@code @Bean} methods, e.g. from another configuration class. If this is not needed
* since each of this particular configuration's {@code @Bean} methods is
* self-contained and designed as a plain factory method for container use, switch
* this flag to {@code false} in order to avoid CGLIB subclass processing.
* <p>
* Turning off bean method interception effectively processes {@code @Bean} methods
* individually like when declared on non-{@code @Configuration} classes, a.k.a.
* "@Bean Lite Mode" (see {@link Bean @Bean's javadoc}). It is therefore behaviorally
* equivalent to removing the {@code @Configuration} stereotype.
* @return whether to proxy {@code @Bean} methods
* @since 2.2
*/
@AliasFor
(
annotation
=
Configuration
.
class
)
boolean
proxyBeanMethods
()
default
true
;
}
}
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringBootConfigurationTests.java
0 → 100644
View file @
4b98fa7d
/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
;
import
org.junit.Test
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.AnnotatedElementUtils
;
import
org.springframework.core.annotation.AnnotationAttributes
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link SpringBootConfiguration @SpringBootConfiguration}.
*
* @author Andy Wilkinson
*/
public
class
SpringBootConfigurationTests
{
@Test
public
void
proxyBeanMethodsIsEnabledByDefault
()
{
AnnotationAttributes
attributes
=
AnnotatedElementUtils
.
getMergedAnnotationAttributes
(
DefaultSpringBootConfiguration
.
class
,
Configuration
.
class
);
assertThat
(
attributes
.
get
(
"proxyBeanMethods"
)).
isEqualTo
(
true
);
}
@Test
public
void
proxyBeanMethodsCanBeDisabled
()
{
AnnotationAttributes
attributes
=
AnnotatedElementUtils
.
getMergedAnnotationAttributes
(
NoBeanMethodProxyingSpringBootConfiguration
.
class
,
Configuration
.
class
);
assertThat
(
attributes
.
get
(
"proxyBeanMethods"
)).
isEqualTo
(
false
);
}
@SpringBootConfiguration
private
static
class
DefaultSpringBootConfiguration
{
}
@SpringBootConfiguration
(
proxyBeanMethods
=
false
)
private
static
class
NoBeanMethodProxyingSpringBootConfiguration
{
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment