您的位置:首页 > 编程语言 > Java开发

使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例

2016-11-25 10:58 796 查看


bean类:

package User;
public class User{ 

private String username;  

private String password;  

public User(){}  

public User(String username, String password){  
    super();  
    this.username = username;  
    this.password = password;  

}  

public String getUsername(){  
    return username;  

}  

public void setUsername(String username){  
    this.username = username;  
    }  

public String getPassword(){  
    return password;  
    }  

public void setPassword(String password){  
    this.password = password;  

}  
}  
//创建流程
package User;
import java.lang.reflect.Constructor;  
import java.lang.reflect.Method;  
import org.junit.Test;   
public class RefTest {  
    @Test  
    public void testRef() throws Exception {  
        Object obj = getBean("User.User");  
        this.setProperty(obj, "username", "admin");  
        this.setProperty(obj, "password", "passw");  
        User user = (User) obj; //对应ClassPathXmlApplicationContext.getBean(id)  
        System.out.println(user.getUsername());  
        System.out.println(user.getPassword());         
    }  
    public Object getBean(String className) throws Exception {  
        Class cls = null;  
        try {  
            cls = Class.forName(className);//对应Spring ->bean -->class  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
            throw new Exception("类错误!");  
        }  
        Constructor[] cons = null;//得到所有构造器  
        try {  
            cons = cls.getConstructors();  
        } catch (Exception e) {  
            e.printStackTrace();  
            throw new Exception("构造器错误!");  
        }  
        if (cons == null || cons.length < 1) {  
            throw new Exception("没有默认构造方法!");  
        }  
        //如果上面没错,就有构造方法  
        Constructor defCon = cons[0];//得到默认构造器,第0个是默认构造器,无参构造方法  
        Object obj = defCon.newInstance();//实例化,得到一个对象 //Spring - bean -id  
        return obj;  
    }  
    public void setProperty(Object bean, String propertyName, Object propertyValue) throws Exception {  
        Class cls = bean.getClass();  
        Method[] methods = cls.getMethods();//得到所有方法  
        for (Method m : methods) {  
            if (m.getName().equalsIgnoreCase("set" + propertyName)) {  
                //找到方法就注入  
                m.invoke(bean, propertyValue);  
                break;  
            }  
        }  
    }  
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bean
相关文章推荐