我们的目的是在学习MVC的实现方式,而不是真的做一个MVC框架,所以就一切从简,所以这里我们只做Controller中的依赖注入。
也就是说只有Controller中才可以使用我们下面创建的Inject注解。如果再其他的地方使用是注入不成功的哦。
注解
package com.hc.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * * @author chuer * @date 2014-7-16 下午4:34:14 * @version V1.0 */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD}) public @interface Inject { public String className(); }
修改AbstractHcAction
Class<?> cls = controllerClassInfo.getCls(); Object newInstance = cls.getConstructor(new Class[]{}).newInstance(new Object[]{}); //依赖注入 Field[] declaredFields = cls.getDeclaredFields(); for(Field field : declaredFields){ if(field.isAnnotationPresent(Inject.class)){ Inject inject = field.getAnnotation(Inject.class); String setMethod = "set"+field.getName().substring(0,1).toupperCase()+field.getName().substring(1); Class<?> forName = Class.forName(inject.className()); Object newInstance2 = forName.getConstructor(new Class[]{}).newInstance(new Object[]{}); Object newInstance3 = TransactionProxyCache.cache.get(forName); if(newInstance3 != null){ newInstance2 = newInstance3; } Method method = cls.getmethod(setMethod,newInstance2.getClass().getInterfaces()); method.invoke(newInstance,new Object[]{newInstance2}); } } //调用controller方法 Method method = controllerClassInfo.getmethodMap().get(methodParam);
修改UserController
@Inject(className="com.hc.sample.service.UserServiceImpl") private UserService userService;
测试
请看第6章的测试方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。