Skip to content

Commit 5f1a286

Browse files
committed
fix for GRAILS-12080 - Domain classes does not inject services
1 parent 23660e1 commit 5f1a286

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

grails-core/src/main/groovy/grails/config/Settings.groovy

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ interface Settings {
6464
* The default configured constraints for the application
6565
*/
6666
String GORM_DEFAULT_CONSTRAINTS = 'grails.gorm.default.constraints'
67+
68+
/**
69+
* Whether to autowire instances
70+
*/
71+
String GORM_AUTOWIRE_INSTANCES = "grails.gorm.autowire";
6772
/**
6873
* The configured mime types
6974
*/

grails-plugin-controllers/src/main/groovy/org/grails/plugins/web/controllers/api/ControllersDomainBindingApi.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,20 @@
1515
*/
1616
package org.grails.plugins.web.controllers.api;
1717

18+
import grails.config.Config;
19+
import grails.config.Settings;
1820
import grails.core.GrailsApplication;
1921
import grails.core.GrailsDomainClass;
2022
import grails.core.GrailsDomainClassProperty;
2123
import grails.util.GrailsMetaClassUtils;
24+
import grails.util.Holders;
2225
import grails.web.databinding.DataBindingUtils;
2326

2427
import java.util.Map;
2528

2629
import org.grails.core.artefact.DomainClassArtefactHandler;
2730
import org.grails.web.servlet.mvc.GrailsWebRequest;
31+
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
2832
import org.springframework.context.ApplicationContext;
2933

3034
/**
@@ -38,6 +42,7 @@ public class ControllersDomainBindingApi {
3842

3943
public static final String AUTOWIRE_DOMAIN_METHOD = "autowireDomain";
4044

45+
4146
/**
4247
* Autowires the instance
4348
*
@@ -85,6 +90,13 @@ private static GrailsDomainClass getDomainClass(Object instance) {
8590
}
8691

8792
private static void autowire(Object instance) {
88-
GrailsMetaClassUtils.invokeMethodIfExists(instance, AUTOWIRE_DOMAIN_METHOD, new Object[] { instance });
93+
final ApplicationContext applicationContext = Holders.findApplicationContext();
94+
final Config config = Holders.getConfig();
95+
boolean autowire = config != null ? config.getProperty(Settings.GORM_AUTOWIRE_INSTANCES, Boolean.class, true) : true;
96+
if(autowire && applicationContext != null) {
97+
applicationContext
98+
.getAutowireCapableBeanFactory()
99+
.autowireBeanProperties(instance, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
100+
}
89101
}
90102
}

grails-plugin-domain-class/src/main/groovy/org/grails/plugins/domain/DomainClassGrailsPlugin.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,12 @@ class DomainClassGrailsPlugin extends Plugin {
142142

143143
void onConfigChange(Map<String, Object> event) {
144144
ConstraintEvalUtils.clearDefaultConstraints()
145-
def beans = beans {
145+
beans {
146146
def defaultConstraintsMap = getDefaultConstraints(event.source)
147147
"${ConstraintsEvaluator.BEAN_NAME}"(ConstraintsEvaluatorFactoryBean) {
148148
defaultConstraints = defaultConstraintsMap
149149
}
150150
}
151-
beans.registerBeans(applicationContext)
152151
grailsApplication.refreshConstraints()
153152
}
154153
}

0 commit comments

Comments
 (0)