目录结构:
@Component注解代码:
package glut.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Component {
String value() default "";
}
@Resource代码:
package glut.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
String value();// 默认要给出需要注入的实例名
}
Ioc实现代码:
package glut.spring;
import glut.annotation.Component;
import glut.annotation.Resource;
import java.io.File;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class BeanFactory {
/**
* pkg:package to scan;
*/
private String pkg;
/**
* 将Component注解的value返回值作为key,对应的类作为value,存放在instanceMap中
*/
private Map<String, Object> instanceMap = new HashMap<>();
/**
* 如果使用无参构造器,之后请记得使用setPkg方法
*/
public BeanFactory() {
// TODO Auto-generated constructor stub
}
/**
* 调用该构造器会回调ioc
*
* @param pkg
*/
public BeanFactory(String pkg) {
this.pkg =