帮助理解spring框架中的ioc和di
三个代码块
包名IOC
Mysping这个类是主要类用来管理的类,主要方法都在getbean中
package IOC;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class MySpring {
//类的全集名
public MySpring()
{
}
public Object getBean(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Object o = null;
try {
Class myclass = Class.forName(className);
o = myclass.newInstance();
//自动的依赖注入
//找到所有的方法
//classzz,找到所有的私有属性,获取每一个属性的名字,处理set方法名字
Field[] field = myclass.getDeclaredFields();
for (Field field1 : field) {
String findName = field1.getName();
String first = findName.substring(0, 1).toUpperCase();
String later = findName.substring(1);
StringBuilder str = new StringBuilder("set");
str.append(first);
str.append(later);
//获取属性类型,获取方法的时候有用
Class cl = field1.getType();
//tong过这个方法名找寻set方法
Method method = myclass.getMethod(str.toString(), cl);
//构造带string类型的构造方法new String (int);
//解决对象中其他基本分装类型的情况
//这里直接用swj做依赖注入,想试试的可以用java,scanner输入来赋予依赖注入的值。
Constructor constructor = cl.getConstructor(String.class);
method.invoke(o, constructor.newInstance("swj"));
}
}
catch (Exception e)
{
e.printStackTrace();
}
return o;
}
}
用来被管理的类Person
package IOC;
public class Person {
private String name;
private String passwd;
public Person()
{
}
public Person(String name,String passwd)
{
this.name = name;
this.passwd = passwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
测试类,直接运行免方法即可,对象就更具你的类的全集名被创建起来了。
package IOC;
public class IOCMian {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
MySpring mySpring = new MySpring();
Person person=(Person) mySpring.getBean("IOC.Person");
System.out.println(person.getName());
}
}