what will happen if I override a bean definition in java config?
up vote
0
down vote
favorite
When developing with Spring Data Mongodb, I want to do some customization in my MongoDB configuraion.
General, I will extends the AbstractMongoConfiguration, and implement the abstract methods. currently, the AbstractMongoConfiguration class has the following:
@Configuration
public abstract AbstractConfiguration extends MongoConfigurationSupport {
public abstract MongoClient mongoClient();
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactor(), mappingMongoConverter());
....
}
When extending this class, I want to customize the bean MongoTemplate, So I want to override the mongoTemplate method, does this work?
@Configuration
public MongoConfiguration extends AbstractConfiguration {
public MongoClient mongoClient(){
....
}
@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate template = super.mongoTemplate();
template.setWriteResultChecking(WriteResultChecking.EXCEPTION);
}
....
}
java spring mongodb configuration override
add a comment |
up vote
0
down vote
favorite
When developing with Spring Data Mongodb, I want to do some customization in my MongoDB configuraion.
General, I will extends the AbstractMongoConfiguration, and implement the abstract methods. currently, the AbstractMongoConfiguration class has the following:
@Configuration
public abstract AbstractConfiguration extends MongoConfigurationSupport {
public abstract MongoClient mongoClient();
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactor(), mappingMongoConverter());
....
}
When extending this class, I want to customize the bean MongoTemplate, So I want to override the mongoTemplate method, does this work?
@Configuration
public MongoConfiguration extends AbstractConfiguration {
public MongoClient mongoClient(){
....
}
@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate template = super.mongoTemplate();
template.setWriteResultChecking(WriteResultChecking.EXCEPTION);
}
....
}
java spring mongodb configuration override
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
When developing with Spring Data Mongodb, I want to do some customization in my MongoDB configuraion.
General, I will extends the AbstractMongoConfiguration, and implement the abstract methods. currently, the AbstractMongoConfiguration class has the following:
@Configuration
public abstract AbstractConfiguration extends MongoConfigurationSupport {
public abstract MongoClient mongoClient();
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactor(), mappingMongoConverter());
....
}
When extending this class, I want to customize the bean MongoTemplate, So I want to override the mongoTemplate method, does this work?
@Configuration
public MongoConfiguration extends AbstractConfiguration {
public MongoClient mongoClient(){
....
}
@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate template = super.mongoTemplate();
template.setWriteResultChecking(WriteResultChecking.EXCEPTION);
}
....
}
java spring mongodb configuration override
When developing with Spring Data Mongodb, I want to do some customization in my MongoDB configuraion.
General, I will extends the AbstractMongoConfiguration, and implement the abstract methods. currently, the AbstractMongoConfiguration class has the following:
@Configuration
public abstract AbstractConfiguration extends MongoConfigurationSupport {
public abstract MongoClient mongoClient();
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactor(), mappingMongoConverter());
....
}
When extending this class, I want to customize the bean MongoTemplate, So I want to override the mongoTemplate method, does this work?
@Configuration
public MongoConfiguration extends AbstractConfiguration {
public MongoClient mongoClient(){
....
}
@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate template = super.mongoTemplate();
template.setWriteResultChecking(WriteResultChecking.EXCEPTION);
}
....
}
java spring mongodb configuration override
java spring mongodb configuration override
asked Nov 11 at 4:09
Roy
1
1
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
The fact that you're using @Override
in this case is not directly related to the concept of overriding a Spring Bean. Spring tracks beans by name, and it's possible to replace a bean with another one with the same name--this isn't used very often, but it's sometimes necessary to get around sticky situations. @Override
is specifically a Java-inheritance bit.
In your case, your setup should work as you expect because when Spring instantiates your bean, it'll call MongoConfiguration#mongoTemplate()
. If the definitions were in different classes, then they would both be producing beans named mongoTemplate
, and the last one evaluated would win (there are tricks to controlling this explicitly, either using @Order
or injecting the other configuration, but it's not ideal).
Note that in this specific case, you might prefer to use Spring Boot auto-configuration, in which case you wouldn't override the Java method. Instead, you could inject the MongoTemplate
and just call the setter method on it, either by writing an ApplicationRunner
or listening for ContextRefreshedEvent
.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
The fact that you're using @Override
in this case is not directly related to the concept of overriding a Spring Bean. Spring tracks beans by name, and it's possible to replace a bean with another one with the same name--this isn't used very often, but it's sometimes necessary to get around sticky situations. @Override
is specifically a Java-inheritance bit.
In your case, your setup should work as you expect because when Spring instantiates your bean, it'll call MongoConfiguration#mongoTemplate()
. If the definitions were in different classes, then they would both be producing beans named mongoTemplate
, and the last one evaluated would win (there are tricks to controlling this explicitly, either using @Order
or injecting the other configuration, but it's not ideal).
Note that in this specific case, you might prefer to use Spring Boot auto-configuration, in which case you wouldn't override the Java method. Instead, you could inject the MongoTemplate
and just call the setter method on it, either by writing an ApplicationRunner
or listening for ContextRefreshedEvent
.
add a comment |
up vote
0
down vote
The fact that you're using @Override
in this case is not directly related to the concept of overriding a Spring Bean. Spring tracks beans by name, and it's possible to replace a bean with another one with the same name--this isn't used very often, but it's sometimes necessary to get around sticky situations. @Override
is specifically a Java-inheritance bit.
In your case, your setup should work as you expect because when Spring instantiates your bean, it'll call MongoConfiguration#mongoTemplate()
. If the definitions were in different classes, then they would both be producing beans named mongoTemplate
, and the last one evaluated would win (there are tricks to controlling this explicitly, either using @Order
or injecting the other configuration, but it's not ideal).
Note that in this specific case, you might prefer to use Spring Boot auto-configuration, in which case you wouldn't override the Java method. Instead, you could inject the MongoTemplate
and just call the setter method on it, either by writing an ApplicationRunner
or listening for ContextRefreshedEvent
.
add a comment |
up vote
0
down vote
up vote
0
down vote
The fact that you're using @Override
in this case is not directly related to the concept of overriding a Spring Bean. Spring tracks beans by name, and it's possible to replace a bean with another one with the same name--this isn't used very often, but it's sometimes necessary to get around sticky situations. @Override
is specifically a Java-inheritance bit.
In your case, your setup should work as you expect because when Spring instantiates your bean, it'll call MongoConfiguration#mongoTemplate()
. If the definitions were in different classes, then they would both be producing beans named mongoTemplate
, and the last one evaluated would win (there are tricks to controlling this explicitly, either using @Order
or injecting the other configuration, but it's not ideal).
Note that in this specific case, you might prefer to use Spring Boot auto-configuration, in which case you wouldn't override the Java method. Instead, you could inject the MongoTemplate
and just call the setter method on it, either by writing an ApplicationRunner
or listening for ContextRefreshedEvent
.
The fact that you're using @Override
in this case is not directly related to the concept of overriding a Spring Bean. Spring tracks beans by name, and it's possible to replace a bean with another one with the same name--this isn't used very often, but it's sometimes necessary to get around sticky situations. @Override
is specifically a Java-inheritance bit.
In your case, your setup should work as you expect because when Spring instantiates your bean, it'll call MongoConfiguration#mongoTemplate()
. If the definitions were in different classes, then they would both be producing beans named mongoTemplate
, and the last one evaluated would win (there are tricks to controlling this explicitly, either using @Order
or injecting the other configuration, but it's not ideal).
Note that in this specific case, you might prefer to use Spring Boot auto-configuration, in which case you wouldn't override the Java method. Instead, you could inject the MongoTemplate
and just call the setter method on it, either by writing an ApplicationRunner
or listening for ContextRefreshedEvent
.
answered Nov 11 at 4:29
chrylis
49.9k1678115
49.9k1678115
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53245766%2fwhat-will-happen-if-i-override-a-bean-definition-in-java-config%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown