使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例
2016-11-25 10:58
796 查看
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、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 根据指定类名创建实例(Java的反射机制)
- 7.7.2: Bean实例的创建方式及依赖配置---使用静态工厂方法创建Bean
- spring使用注解让bean创建多个实例
- Spring使用教程(二)配置bean:静态工厂方法和实例工厂方法
- 使用dom4j:读取spring配置文件,实例化bean对象并注入依赖对象
- Java反射,根据类名创建带参数的实例(获取参数类型,参数等)
- spring学习小结7_使用工厂方法来配置bean:静态工厂方法和实例工厂方法
- 如何在filter中使用bean实例,web服务启动配置加载顺序
- spring MethodInvokingFactoryBean 的使用和了解,Spring 通过通过方法创建Bean的实例
- 详解C# 利用反射根据类名创建类的实例对象
- 7.7.1: Bean实例的创建方式及依赖配置---使用构造器创建Bean实例
- Java - Spring中如何使用注解来配置Bean?有哪些相关的注解?
- C++实现 反射 机制( 即根据 类名 创建 类实例)Create C++ Object Dynamically
- 使用hibernate根据配置的实体bean类无法自动创建数据库表
- Java反射,根据类名创建带参数的实例
- 使用Spring集成Hibernate配置,根据实体类自动创建表
- Java反射,根据类名创建带参数的实例
- spring boot 条件注解的使用@Conditional;@Conditional 可以根据条件,创建不同的bean,