【1】、第一步,Maven引入Google的Guice的jar包;java
<dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>4.0</version> </dependency>
ps:其實我沒有使用mavn,單獨建了個maven項目,就爲了,找jar包,而後,複製到,webRoot下的lib目錄下,好狗血。web
【2】、第二部,編寫Jfinal的GuicePlugin.java和它配對的攔截器GuicePluginInterceptor.java;spring
GuicePlugin.java的代碼以下:jsp
包名我就不顯示了。 import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.jfinal.plugin.IPlugin; /** * @author 韋甩甩 * @date 2016年1月13日 上午10:46:38 */ public class GuicePlugin implements IPlugin { public static Injector guice; private boolean isStarted = false; @Override public boolean start() { if( isStarted == true) return true; guice = (Injector) Guice.createInjector(new AbstractModule() { @Override protected void configure() { } }); isStarted = true; return true; } @Override public boolean stop() { isStarted = false; return true; } }
GuicePluginInterceptor.java攔截器的代碼以下:maven
package 包名我就不顯示了 import java.lang.reflect.Field; import com.google.inject.Inject; import com.jfinal.aop.Interceptor; import com.jfinal.aop.Invocation; import com.jfinal.core.Controller; /** * 攔截器 * * @author 韋甩甩 * @date 2016年1月9日 下午11:04:18 */ public class GuicePluginInterceptor implements Interceptor { @Override public void intercept(Invocation ai) { //獲得攔截的controller 判斷是否有依賴注入的屬性 Controller controller = ai.getController(); Field[] fields = controller.getClass().getDeclaredFields(); for (Field field : fields) { Object bean = null; if (field.isAnnotationPresent(Inject.class)) bean = GuicePlugin.guice.getInstance(field.getType()); else continue; try { if (bean != null) { field.setAccessible(true); field.set(controller, bean); } } catch (Exception e) { throw new RuntimeException(e); } } ai.invoke(); } }
【3】、第三步,在JfinalConfig類里加入插件ide
public class MyConfig extends JFinalConfig { /** * 配置插件 */ public void configPlugin(Plugins me) { me.add(new GuicePlugin()); } /** * 配置全局攔截器 */ public void configInterceptor(Interceptors me) { me.addGlobalActionInterceptor(new GuicePluginInterceptor()); } }
【4】、第四步,編寫service接口和實現類ui
GuiceService.java代碼以下:google
import com.google.inject.ImplementedBy; /** * @author 韋甩甩 * @date 2016年1月13日 上午11:18:35 */ @ImplementedBy(GuiceServiceImpl.class) public interface GuiceService { public abstract String info(); }
接口實現類GuiceServiceImpl.java代碼以下(@Singletion是爲了實現單例模式,模仿springMVC):spa
引入import com.google.inject.Singleton;插件
import com.google.inject.Singleton; /** * @author 韋甩甩 * @date 2016年1月13日 上午11:18:35 */ @Singleton public class GuiceServiceImpl implements GuiceService { @Override public String info() { return "Hello Jfinal"; } }
【5】第五步,在controller類裏使用,加上@Inject,就可使用了,注意,引入的是import com.google.inject.Inject;
/** * IndexController */ public class IndexController extends Controller { @Inject private GuiceService guiceService;//註解servicedemo @ActionKey("/admin/index") public void index() { system.out.println(guiceService.info()); render("/view/platform/index.jsp"); } }
打完收工。