Skip to content

Commit

Permalink
Introducing IoC module component.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Nov 28, 2016
1 parent 10dec41 commit 9d022ca
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 10 deletions.
2 changes: 2 additions & 0 deletions rapidoid-commons/src/main/resources/rapidoid-classes.txt
Expand Up @@ -18,6 +18,7 @@ org.rapidoid.annotation.DontReload
org.rapidoid.annotation.GET
org.rapidoid.annotation.HEAD
org.rapidoid.annotation.Header
org.rapidoid.annotation.IntegrationTest
org.rapidoid.annotation.OfType
org.rapidoid.annotation.OPTIONS
org.rapidoid.annotation.Order
Expand Down Expand Up @@ -450,6 +451,7 @@ org.rapidoid.ioc.IoCContext
org.rapidoid.ioc.IoCContextChanges
org.rapidoid.ioc.IoCContextImpl
org.rapidoid.ioc.IoCContextWrapper
org.rapidoid.ioc.IoCModule
org.rapidoid.ioc.IoCState
org.rapidoid.ioc.OptionalJPAUtil
org.rapidoid.io.FileSearch
Expand Down
2 changes: 1 addition & 1 deletion rapidoid-inject/src/main/java/org/rapidoid/ioc/IoC.java
Expand Up @@ -44,7 +44,7 @@ public static <T> T singleton(Class<T> type) {
return DEFAULT_CONTEXT.singleton(type);
}

public static <T> T autowire(T target) {
public static boolean autowire(Object target) {
return DEFAULT_CONTEXT.autowire(target);
}

Expand Down
Expand Up @@ -41,7 +41,7 @@ public interface IoCContext {

<T> T singleton(Class<T> type);

<T> T autowire(T target);
boolean autowire(Object target);

<T> T autowire(T target, Mapper<String, Object> session, Mapper<String, Object> bindings);

Expand Down
Expand Up @@ -146,10 +146,9 @@ public synchronized <T> T singleton(Class<T> type) {
}

@Override
public synchronized <T> T autowire(T target) {
public synchronized boolean autowire(Object target) {
Log.debug("Autowire", "target", target);
autowire(target, null, null, null);
return target;
return autowire(target, null, null, null);
}

@Override
Expand Down Expand Up @@ -324,11 +323,12 @@ private <T> T getInjectableByName(Object target, Class<T> type, String name,
return (T) instance;
}

private void autowire(Object target, Map<String, Object> properties, Mapper<String, Object> session,
Mapper<String, Object> locals) {
private boolean autowire(Object target, Map<String, Object> properties, Mapper<String, Object> session,
Mapper<String, Object> locals) {

Log.debug("Autowiring", "target", target, "session", session, "bindings", locals);

boolean autowired = false;
for (Field field : meta(target.getClass()).injectableFields) {

boolean optional = isInjectOptional(field);
Expand All @@ -338,8 +338,11 @@ private void autowire(Object target, Map<String, Object> properties, Mapper<Stri

if (!optional || value != null) {
Cls.setFieldValue(target, field.getName(), value);
autowired = true;
}
}

return autowired;
}

private boolean isInjectOptional(Field field) {
Expand Down
Expand Up @@ -86,7 +86,7 @@ public synchronized <T> T singleton(Class<T> type) {
}

@Override
public synchronized <T> T autowire(T target) {
public synchronized boolean autowire(Object target) {
IoCState backup = context.backup();

try {
Expand Down
54 changes: 54 additions & 0 deletions rapidoid-inject/src/main/java/org/rapidoid/ioc/IoCModule.java
@@ -0,0 +1,54 @@
package org.rapidoid.ioc;

/*
* #%L
* rapidoid-inject
* %%
* Copyright (C) 2014 - 2016 Nikolche Mihajlovski and contributors
* %%
* 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.
* #L%
*/

import org.rapidoid.RapidoidModule;
import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;

@Authors("Nikolche Mihajlovski")
@Since("5.3.0")
public class IoCModule extends RapidoidThing implements RapidoidModule {

@Override
public String name() {
return "IoC";
}

@Override
public void beforeTest(Object test, boolean isIntegrationTest) {
cleanUp();

// unsuccessful autowire might have some side-effects
if (!IoC.autowire(test)) cleanUp();
}

@Override
public void afterTest(Object test, boolean isIntegrationTest) {
cleanUp();
}

private void cleanUp() {
IoC.reset();
}

}
Expand Up @@ -32,7 +32,6 @@
import org.rapidoid.env.Env;
import org.rapidoid.fluent.Do;
import org.rapidoid.io.IO;
import org.rapidoid.ioc.IoC;
import org.rapidoid.jpa.JPA;
import org.rapidoid.jpa.JPAUtil;
import org.rapidoid.log.Log;
Expand Down Expand Up @@ -76,7 +75,6 @@ public void openContext() {
RapidoidTest.before(this);

JPAUtil.reset();
IoC.reset();

Conf.ROOT.setPath(getTestName());

Expand Down

0 comments on commit 9d022ca

Please sign in to comment.