Skip to content

Commit 6399d32

Browse files
author
harry.ding
committed
login
1 parent bce073b commit 6399d32

File tree

4 files changed

+195
-38
lines changed

4 files changed

+195
-38
lines changed

androidmvc/src/main/java/com/bitmain/hale/androidmvc/config/BeanContainer.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
import java.net.URL;
1717
import java.util.ArrayList;
1818
import java.util.Enumeration;
19+
import java.util.HashMap;
1920
import java.util.List;
21+
import java.util.Map;
2022

2123
import dalvik.system.DexFile;
2224

@@ -28,12 +30,25 @@ public class BeanContainer {
2830

2931

3032
static boolean isLoadBean = false;
31-
private static ArrayList<Class<?>> beans = new ArrayList<>();
33+
private static HashMap<String, Class<?>> beans = new HashMap<>();
3234

33-
public static ArrayList<Class<?>> getBeans() {
34-
return beans;
35+
public static ArrayList<Class<?>> getAllBeans() {
36+
ArrayList<Class<?>> allBeans = new ArrayList<>();
37+
for (Map.Entry<String, Class<?>> entry : beans.entrySet()) {
38+
allBeans.add(entry.getValue());
39+
}
40+
return allBeans;
3541
}
3642

43+
public static Class<?> getBean(String name) {
44+
return beans.get(name);
45+
}
46+
47+
public static void addBean(String name, Class cls) {
48+
if (!beans.containsKey(name)) {
49+
beans.put(name, cls);
50+
}
51+
}
3752

3853
@SuppressWarnings("unchecked")
3954
public static <T> T getMetaData(Context context, String name) {
@@ -63,7 +78,9 @@ public static void init(Configuration configuration) throws IOException {
6378
throw new RuntimeException("cant load component-scan config");
6479
}
6580
} else {
66-
beans.addAll(configuration.getBeanClasses());
81+
for (Class<?> cls : configuration.getBeanClasses()) {
82+
addBean(cls.getName(), cls);
83+
}
6784
}
6885
isLoadBean = true;
6986
}
@@ -147,9 +164,7 @@ private static void scanForModelClasses(File path, String packageName, ClassLoad
147164
Controller controllerAnnotation = discoveredClass.getAnnotation(Controller.class);
148165
Dao daoAnnotation = discoveredClass.getAnnotation(Dao.class);
149166
if (serviceAnnotation != null || controllerAnnotation != null || daoAnnotation != null) {
150-
if (!beans.contains(discoveredClass)) {
151-
beans.add(discoveredClass);
152-
}
167+
addBean(discoveredClass.getName(), discoveredClass);
153168
}
154169
} catch (ClassNotFoundException e) {
155170
Log.e("Couldn't create class.", e.getMessage());

androidmvc/src/main/java/com/bitmain/hale/androidmvc/di/Controller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*/
1111
@Target(ElementType.TYPE)
1212
@Retention(RetentionPolicy.RUNTIME)
13-
public @interface Controller {
13+
public @interface Controller{
1414
//是否加载为单例,默认单例
1515
boolean singleInstance() default true;
1616
}

androidmvc/src/main/java/com/bitmain/hale/androidmvc/utils/AndroidSpringMvc.java

Lines changed: 58 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class AndroidSpringMvc {
2323
private static AndroidSpringMvc instance = new AndroidSpringMvc();
2424
private HashMap<Class<?>, Object> beanMap = new HashMap();
2525

26-
public static void init( Configuration configuration) {
26+
public static void init(Configuration configuration) {
2727
try {
2828
BeanContainer.init(configuration);
2929
} catch (Exception e) {
@@ -55,39 +55,70 @@ private void injectObject(Object object) throws Exception {
5555
if (fieldAnnotation != null) {
5656
Class<?> fieldType = field.getType();
5757
Object injectInstance = null;
58-
//遍历实体配置
59-
ArrayList<Class<?>> classArrayList = BeanContainer.getBeans();
60-
for (int i = 0; i < classArrayList.size(); i++) {
61-
if (fieldType.isAssignableFrom(classArrayList.get(i))) {
62-
Class<?> cls = classArrayList.get(i);
63-
Service serviceAnnotation = cls.getAnnotation(Service.class);
64-
Controller controllerAnnotation = cls.getAnnotation(Controller.class);
65-
Dao daoAnnotation = cls.getAnnotation(Dao.class);
66-
if (cls.getAnnotation(Service.class) != null) {//注入Service
67-
String autowiredAnnotationName = fieldAnnotation.name();
68-
String serviceAnnotationName = serviceAnnotation.name();
69-
//可以注入的条件是名字相同 或者 autowiredAnnotationName无标记
70-
if ((!TextUtils.isEmpty(autowiredAnnotationName) && autowiredAnnotationName.equals(serviceAnnotationName)
71-
|| (TextUtils.isEmpty(autowiredAnnotationName)))) {
72-
injectInstance = serviceAnnotation.singleInstance() ? injectAsSingleInstance(cls) : injectAsNewInstance(cls);
73-
74-
field.setAccessible(true);
75-
field.set(object, injectInstance);
58+
String autowiredAnnotationName = fieldAnnotation.name();
59+
60+
String beanName = fieldType.getName();
61+
if (!TextUtils.isEmpty(autowiredAnnotationName)) {
62+
beanName = fieldType.getName() + "_" + autowiredAnnotationName;
63+
}
64+
65+
Class<?> beanCls = BeanContainer.getBean(beanName);
66+
if (beanCls == null) {
67+
//遍历实体配置
68+
ArrayList<Class<?>> classArrayList = BeanContainer.getAllBeans();
69+
for (int i = 0; i < classArrayList.size(); i++) {
70+
if (fieldType.isAssignableFrom(classArrayList.get(i))) {//找到实现类
71+
Class<?> cls = classArrayList.get(i);
72+
Service serviceAnnotation = cls.getAnnotation(Service.class);
73+
Controller controllerAnnotation = cls.getAnnotation(Controller.class);
74+
Dao daoAnnotation = cls.getAnnotation(Dao.class);
75+
if (cls.getAnnotation(Service.class) != null) {//注入Service
76+
String serviceAnnotationName = serviceAnnotation.name();
77+
//可以注入的条件是名字相同 或者 autowiredAnnotationName无标记
78+
if ((!TextUtils.isEmpty(autowiredAnnotationName) && autowiredAnnotationName.equals(serviceAnnotationName)
79+
|| (TextUtils.isEmpty(autowiredAnnotationName)))) {
80+
beanCls = cls;
81+
break;
82+
}
83+
} else if (controllerAnnotation != null) {//注入Controller
84+
beanCls = cls;
85+
break;
86+
} else if (daoAnnotation != null) {//注入Dao
87+
beanCls = cls;
7688
break;
7789
}
78-
} else if (controllerAnnotation != null) {//注入Controller
79-
injectInstance = controllerAnnotation.singleInstance() ? injectAsSingleInstance(cls) : injectAsNewInstance(cls);
80-
field.setAccessible(true);
81-
field.set(object, injectInstance);
82-
break;
83-
} else if (daoAnnotation != null) {//注入Dao
84-
injectInstance = daoAnnotation.singleInstance() ? injectAsSingleInstance(cls) : injectAsNewInstance(cls);
90+
}
91+
}
92+
93+
if (beanCls != null) {
94+
BeanContainer.addBean(beanName, beanCls);
95+
}
96+
}
97+
98+
if (beanCls != null) {
99+
Service serviceAnnotation = beanCls.getAnnotation(Service.class);
100+
Controller controllerAnnotation = beanCls.getAnnotation(Controller.class);
101+
Dao daoAnnotation = beanCls.getAnnotation(Dao.class);
102+
if (serviceAnnotation != null) {//注入Service
103+
String serviceAnnotationName = serviceAnnotation.name();
104+
//可以注入的条件是名字相同 或者 autowiredAnnotationName无标记
105+
if ((!TextUtils.isEmpty(autowiredAnnotationName) && autowiredAnnotationName.equals(serviceAnnotationName)
106+
|| (TextUtils.isEmpty(autowiredAnnotationName)))) {
107+
injectInstance = serviceAnnotation.singleInstance() ? injectAsSingleInstance(beanCls) : injectAsNewInstance(beanCls);
85108
field.setAccessible(true);
86109
field.set(object, injectInstance);
87-
break;
88110
}
111+
} else if (controllerAnnotation != null) {//注入Controller
112+
injectInstance = controllerAnnotation.singleInstance() ? injectAsSingleInstance(beanCls) : injectAsNewInstance(beanCls);
113+
field.setAccessible(true);
114+
field.set(object, injectInstance);
115+
} else if (daoAnnotation != null) {//注入Dao
116+
injectInstance = daoAnnotation.singleInstance() ? injectAsSingleInstance(beanCls) : injectAsNewInstance(beanCls);
117+
field.setAccessible(true);
118+
field.set(object, injectInstance);
89119
}
90120
}
121+
91122
if (injectInstance == null) {
92123
try {
93124
injectInstance = fieldType.newInstance();
@@ -98,10 +129,7 @@ private void injectObject(Object object) throws Exception {
98129
throw new RuntimeException(fieldType + " cannot Autowired inject");
99130
}
100131
}
101-
102132
}
103-
104-
Log.i("mvc",field.getName()+"");
105133
}
106134

107135
}

app/src/main/java/com/bitmain/hale/springmvc/MainActivity.java

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.os.Bundle;
44
import android.support.v7.app.AppCompatActivity;
5+
import android.util.Log;
56

67
import com.bitmain.hale.androidmvc.di.Autowired;
78
import com.bitmain.hale.androidmvc.utils.AndroidSpringMvc;
@@ -10,14 +11,127 @@
1011
public class MainActivity extends AppCompatActivity {
1112
@Autowired
1213
LoginController loginController;
14+
@Autowired
15+
LoginController x;
16+
@Autowired
17+
LoginController loginController2;
18+
@Autowired
19+
LoginController loginController3;
20+
@Autowired
21+
LoginController loginController4;
22+
@Autowired
23+
LoginController loginController5;
24+
@Autowired
25+
LoginController loginController6;
26+
@Autowired
27+
LoginController loginController7;
28+
@Autowired
29+
LoginController loginController8;
30+
@Autowired
31+
LoginController loginController9;
32+
@Autowired
33+
LoginController loginController10;
34+
@Autowired
35+
LoginController loginController11;
36+
@Autowired
37+
LoginController loginController12;
38+
@Autowired
39+
LoginController loginController13;
40+
@Autowired
41+
LoginController loginController14;
42+
@Autowired
43+
LoginController loginController15;
44+
@Autowired
45+
LoginController loginController16;
46+
@Autowired
47+
LoginController loginController17;
48+
@Autowired
49+
LoginController loginController18;
50+
@Autowired
51+
LoginController loginController19;
52+
@Autowired
53+
LoginController loginController20;
54+
@Autowired
55+
LoginController loginController21;
56+
@Autowired
57+
LoginController loginController22;
58+
@Autowired
59+
LoginController loginController23;
60+
@Autowired
61+
LoginController loginController24;
62+
@Autowired
63+
LoginController loginController71;
64+
@Autowired
65+
LoginController loginController81;
66+
@Autowired
67+
LoginController loginController91;
68+
@Autowired
69+
LoginController loginController101;
70+
@Autowired
71+
LoginController loginController211;
72+
@Autowired
73+
LoginController loginController311;
74+
@Autowired
75+
LoginController loginController411;
76+
@Autowired
77+
LoginController loginController511;
78+
@Autowired
79+
LoginController loginController611;
80+
@Autowired
81+
LoginController loginController711;
82+
@Autowired
83+
LoginController loginController811;
84+
@Autowired
85+
LoginController loginController911;
86+
@Autowired
87+
LoginController loginController1011;
88+
@Autowired
89+
LoginController loginController2111;
90+
@Autowired
91+
LoginController loginController3111;
92+
@Autowired
93+
LoginController loginController4111;
94+
@Autowired
95+
LoginController loginController5111;
96+
@Autowired
97+
LoginController loginController6111;
98+
@Autowired
99+
LoginController loginController7111;
100+
@Autowired
101+
LoginController loginController8111;
102+
@Autowired
103+
LoginController loginController9111;
104+
@Autowired
105+
LoginController loginController10111;
106+
@Autowired
107+
LoginController loginController21111;
108+
@Autowired
109+
LoginController loginController31111;
110+
@Autowired
111+
LoginController loginController41111;
112+
@Autowired
113+
LoginController loginController51111;
114+
@Autowired
115+
LoginController loginController61111;
116+
@Autowired
117+
LoginController loginController71111;
118+
@Autowired
119+
LoginController loginController81111;
120+
@Autowired
121+
LoginController loginController91111;
122+
@Autowired
123+
LoginController loginController101111;
124+
13125

14126
@Override
15127
protected void onCreate(Bundle savedInstanceState) {
16128
super.onCreate(savedInstanceState);
17129
setContentView(R.layout.activity_main);
130+
Log.i("mvc","1111");
18131

19132
AndroidSpringMvc.inject(this);
20133

134+
Log.i("mvc","2222");
21135
loginController.login("aaaa", "bbbbbb");
22136
}
23137
}

0 commit comments

Comments
 (0)