Skip to content

Commit c7cdc75

Browse files
author
harry.ding
committed
login
1 parent 1c8341a commit c7cdc75

File tree

7 files changed

+121
-62
lines changed

7 files changed

+121
-62
lines changed

androidmvc/src/main/java/com/bitmain/hale/androidmvc/application/AndroidMvcApplication.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

androidmvc/src/main/java/com/bitmain/hale/androidmvc/config/BeanManager.java renamed to androidmvc/src/main/java/com/bitmain/hale/androidmvc/config/BeanContainer.java

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,10 @@
2424
* Created by harry.ding on 2018/8/13.
2525
*/
2626

27-
public class BeanManager {
27+
public class BeanContainer {
2828

2929

3030
static boolean isLoadBean = false;
31-
32-
// private static HashMap<Class<? extends Annotation>, List<Class<?>>> beanMap = new HashMap();
33-
34-
// static {
35-
// beanMap.put(Service.class, new ArrayList<Class<?>>());
36-
// beanMap.put(Dao.class, new ArrayList<Class<?>>());
37-
// beanMap.put(Controller.class, new ArrayList<Class<?>>());
38-
// }
39-
// public static List<Class<?>> getBeans(Class<? extends Annotation> annotationClass) {
40-
// return beanMap.get(annotationClass);
41-
// }
4231
private static ArrayList<Class<?>> beans = new ArrayList<>();
4332

4433
public static ArrayList<Class<?>> getBeans() {
@@ -55,30 +44,34 @@ public static <T> T getMetaData(Context context, String name) {
5544
if (ai.metaData != null) {
5645
return (T) ai.metaData.get(name);
5746
}
58-
}
59-
catch (Exception e) {
60-
Log.i("mvc","Couldn't find meta-data: " + name);
47+
} catch (Exception e) {
48+
Log.i("mvc", "Couldn't find meta-data: " + name);
6149
}
6250

6351
return null;
6452
}
6553

6654

67-
public static void init(Context context) throws IOException {
68-
String scanPackageList = getMetaData(context,"component-scan");
69-
if (scanPackageList != null) {
70-
String pakageList[] = scanPackageList.split(",");
71-
if (!isLoadBean) {
72-
scanForModel(context,pakageList);
73-
isLoadBean = true;
55+
public static void init(Configuration configuration) throws IOException {
56+
if (!isLoadBean) {
57+
if (configuration.getBeanClasses().isEmpty()) {
58+
String scanPackageList = getMetaData(configuration.getContext(), "component-scan");
59+
if (scanPackageList != null) {
60+
String pakageList[] = scanPackageList.split(",");
61+
scanForModel(configuration.getContext(), pakageList);
62+
} else {
63+
throw new RuntimeException("cant load component-scan config");
64+
}
65+
} else {
66+
beans.addAll(configuration.getBeanClasses());
7467
}
75-
}else {
76-
throw new RuntimeException("cant load component-scan config");
68+
isLoadBean = true;
7769
}
7870

71+
7972
}
8073

81-
private static void scanForModel(Context context,String pakageList[]) throws IOException {
74+
private static void scanForModel(Context context, String pakageList[]) throws IOException {
8275
String packageName = context.getPackageName();
8376
String sourcePath = context.getApplicationInfo().sourceDir;
8477
List<String> paths = new ArrayList<String>();
@@ -154,7 +147,9 @@ private static void scanForModelClasses(File path, String packageName, ClassLoad
154147
Controller controllerAnnotation = discoveredClass.getAnnotation(Controller.class);
155148
Dao daoAnnotation = discoveredClass.getAnnotation(Dao.class);
156149
if (serviceAnnotation != null || controllerAnnotation != null || daoAnnotation != null) {
157-
beans.add(discoveredClass);
150+
if (!beans.contains(discoveredClass)) {
151+
beans.add(discoveredClass);
152+
}
158153
}
159154
} catch (ClassNotFoundException e) {
160155
Log.e("Couldn't create class.", e.getMessage());
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.bitmain.hale.androidmvc.config;
2+
3+
import android.content.Context;
4+
5+
import com.bitmain.hale.androidmvc.di.Controller;
6+
import com.bitmain.hale.androidmvc.di.Dao;
7+
import com.bitmain.hale.androidmvc.di.Service;
8+
9+
import java.util.ArrayList;
10+
import java.util.Arrays;
11+
import java.util.List;
12+
13+
/**
14+
* Created by harry.ding on 2018/8/27.
15+
*/
16+
17+
public class Configuration {
18+
private List<Class<?>> mBeanClasses;
19+
private Context mContext;
20+
21+
private Configuration(Builder builder) {
22+
mBeanClasses = builder.mBeanClasses;
23+
mContext = builder.mContext;
24+
}
25+
26+
public List<Class<?>> getBeanClasses() {
27+
return mBeanClasses;
28+
}
29+
30+
public Context getContext() {
31+
return mContext;
32+
}
33+
34+
public static final class Builder {
35+
private List<Class<?>> mBeanClasses = new ArrayList<>();
36+
private Context mContext;
37+
38+
public Builder(Context mContext) {
39+
this.mContext = mContext;
40+
}
41+
42+
public Builder setBeanClasses(Class<?>... beanClasses) {
43+
for (int i = 0; i < beanClasses.length; i++) {
44+
Class<?> classBean = beanClasses[i];
45+
Service serviceAnnotation = classBean.getAnnotation(Service.class);
46+
Controller controllerAnnotation = classBean.getAnnotation(Controller.class);
47+
Dao daoAnnotation = classBean.getAnnotation(Dao.class);
48+
if (serviceAnnotation != null || controllerAnnotation != null || daoAnnotation != null) {
49+
if (!mBeanClasses.contains(classBean)) {
50+
mBeanClasses.add(classBean);
51+
}
52+
}
53+
}
54+
return this;
55+
}
56+
57+
public Configuration build() {
58+
return new Configuration(this);
59+
}
60+
}
61+
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import android.text.TextUtils;
55
import android.util.Log;
66

7-
import com.bitmain.hale.androidmvc.config.BeanManager;
7+
import com.bitmain.hale.androidmvc.config.BeanContainer;
8+
import com.bitmain.hale.androidmvc.config.Configuration;
89
import com.bitmain.hale.androidmvc.di.Autowired;
910
import com.bitmain.hale.androidmvc.di.Controller;
1011
import com.bitmain.hale.androidmvc.di.Dao;
@@ -22,9 +23,9 @@ public class AndroidSpringMvc {
2223
private static AndroidSpringMvc instance = new AndroidSpringMvc();
2324
private HashMap<Class<?>, Object> beanMap = new HashMap();
2425

25-
public static void init(Context context) {
26+
public static void init( Configuration configuration) {
2627
try {
27-
BeanManager.init(context);
28+
BeanContainer.init(configuration);
2829
} catch (Exception e) {
2930
e.printStackTrace();
3031
}
@@ -55,14 +56,14 @@ private void injectObject(Object object) throws Exception {
5556
Class<?> fieldType = field.getType();
5657
Object injectInstance = null;
5758
//遍历实体配置
58-
ArrayList<Class<?>> classArrayList = BeanManager.getBeans();
59+
ArrayList<Class<?>> classArrayList = BeanContainer.getBeans();
5960
for (int i = 0; i < classArrayList.size(); i++) {
6061
if (fieldType.isAssignableFrom(classArrayList.get(i))) {
6162
Class<?> cls = classArrayList.get(i);
6263
Service serviceAnnotation = cls.getAnnotation(Service.class);
6364
Controller controllerAnnotation = cls.getAnnotation(Controller.class);
6465
Dao daoAnnotation = cls.getAnnotation(Dao.class);
65-
if (serviceAnnotation != null) {//注入Service
66+
if (cls.getAnnotation(Service.class) != null) {//注入Service
6667
String autowiredAnnotationName = fieldAnnotation.name();
6768
String serviceAnnotationName = serviceAnnotation.name();
6869
//可以注入的条件是名字相同 或者 autowiredAnnotationName无标记

app/proguard-rules.pro

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
-keep class com.google.gson.** { *; }
4848
-keep class com.google.gson.stream.** { *; }
4949
#
50-
-keep class com.bitmain.hale.springmvc.controller.** { @com.bitmain.hale.springmvc.di.Autowired <fields>;}
51-
-keep class com.bitmain.hale.springmvc.dao.** { @com.bitmain.hale.springmvc.di.Autowired <fields>; }
52-
-keep class com.bitmain.hale.springmvc.service.** { @com.bitmain.hale.springmvc.di.Autowired <fields>; }
53-
-keep interface com.bitmain.hale.springmvc.** { *; }
50+
-keep class com.bitmain.hale.springmvc.controller.** { @com.bitmain.hale.androidmvc.di.Autowired <fields>;}
51+
-keep class com.bitmain.hale.springmvc.dao.** { @com.bitmain.hale.androidmvc.di.Autowired <fields>; }
52+
-keep class com.bitmain.hale.springmvc.service.** { @com.bitmain.hale.androidmvc.di.Autowired <fields>; }
53+
-keep interface com.bitmain.hale.androidmvc.** { *; }

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
<meta-data
2222
android:name="component-scan"
23-
android:value="com.bitmain.hale.springmvc.service,om.bitmain.hale.springmvc.controller,om.bitmain.hale.springmvc.dao" />
23+
android:value="com.bitmain.hale.springmvc.service,com.bitmain.hale.springmvc.controller,com.bitmain.hale.springmvc.dao" />
2424
</application>
2525

2626

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,39 @@
11
package com.bitmain.hale.springmvc.application;
22

33
import android.app.Application;
4-
import android.util.Log;
54

6-
import com.bitmain.hale.androidmvc.application.AndroidMvcApplication;
5+
import com.bitmain.hale.androidmvc.config.Configuration;
6+
import com.bitmain.hale.androidmvc.utils.AndroidSpringMvc;
7+
import com.bitmain.hale.springmvc.controller.DoController;
8+
import com.bitmain.hale.springmvc.controller.LoginController;
9+
import com.bitmain.hale.springmvc.dao.impl.AccountDaoImpl;
10+
import com.bitmain.hale.springmvc.service.impl.BusinessServiceImplA;
11+
import com.bitmain.hale.springmvc.service.impl.BusinessServiceImplB;
12+
import com.bitmain.hale.springmvc.service.impl.LoginServiceImpl;
713

814
/**
915
* Created by harry.ding on 2018/8/24.
1016
*/
1117

12-
public class AndroidSpringMvcApplication extends AndroidMvcApplication {
18+
public class AndroidSpringMvcApplication extends Application {
19+
@Override
20+
public void onCreate() {
21+
super.onCreate();
22+
Class classArray[] = new Class[]{
23+
//controller
24+
DoController.class,
25+
LoginController.class,
1326

27+
//dao
28+
AccountDaoImpl.class,
29+
30+
//Service
31+
BusinessServiceImplA.class,
32+
BusinessServiceImplB.class,
33+
LoginServiceImpl.class
34+
};
35+
Configuration.Builder builder = new Configuration.Builder(this).setBeanClasses(classArray);
36+
// Configuration.Builder builder = new Configuration.Builder(this);
37+
AndroidSpringMvc.init(builder.build());
38+
}
1439
}

0 commit comments

Comments
 (0)