BeanWrapper
比较反射和通过beanWrapper设置bean属性
通过反射
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class<?> Clazz = Class.forName("IOC_User");
IOC_User ioc_user=(IOC_User) Clazz.newInstance();
BeanWrapper beanWrapper=new BeanWrapperImpl(ioc_user);
beanWrapper.setPropertyValue("name","msf");
beanWrapper.setPropertyValue("age",21);
System.out.println(ioc_user);
}
通过装饰器
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class<?> Clazz = Class.forName("IOC_User");
IOC_User ioc_user=(IOC_User) Clazz.newInstance();
BeanWrapper beanWrapper=new BeanWrapperImpl(ioc_user);
beanWrapper.setPropertyValue("name","msf");
beanWrapper.setPropertyValue("age",21);
System.out.println(ioc_user);
}
Bean的实例化
bean的实例方式采取了策略模式,InstantiationStrategy是实例化策略接口,有一个直接子类SimpleInstantiationStrategy通过反射实现了简单的实例化功能。
默认情况下容器采用SimpleInstantiationStrategy的子类cglisubclassingInstantiationStrategy策略来实例化bean,通过cglib动态字节码的方式生成功能。优点是提供了方法注入的支持。
容器fa