该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package com.icss.framework;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.icss.annotation.Autowired;
import com.icss.annotation.Service;
/**
*
* @author WangHuizuo
*
*/
public class PackagesApplicationContext2 implements ApplicationContext {
private Map context = new HashMap();
public PackagesApplicationContext2(String... packages) {
List> list = ClassScanner.scan(Service.class, packages);
for (Class> cls : list) {
try {
Object obj = cls.newInstance();
String name = cls.getAnnotation(Service.class).value();
if ("".equals(name)) {
name = cls.getSimpleName().substring(0, 1).toLowerCase()
+ cls.getSimpleName().substring(1);
}
context.put(name, obj);
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException("实例化Bean失败:", e);
}
}
for (Object obj : context.values()) {
for (Method method : obj.getClass().getMethods()) {
if (method.getName().matches("^set[A-Z]\\w*$")
&& method.getParameterTypes().length == 1
&& method.isAnnotationPresent(Autowired.class)) {
Object value = null;
try {
String name = method.getName().substring(3);
name = name.substring(0, 1).toLowerCase()
+ name.substring(1);
value = getBean(name);
method.invoke(obj, value);
System.out.println(name+"---"+value);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
throw new RuntimeException("自动依赖注入失败:" + method, e);
}
}
}
}
}
@Override
public Object getBean(String name) {
return context.get(name);
}
}