(二)编写beanFactory类,读取配置文件,并创建对象,代码如下 packageorg.study.factory;importjava.io.IOException;importjava.io.InputStream;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Map;importjava.util.Properties;publicclassbeanFactory{privatestaticfinalMap<String,String> beanProperties=new...
通过自定义的factoryBean来创建bean对象时,我们需要在工厂类上实现factoryBean接口, Spring中有两种类型的bean,一种是普通bean,另一种是工厂bean,即FactoryBean。 工厂bean跟普通bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂bean的getObject方法所返回的对象。 工厂bean必须实现org.springframework.bean...
protectedvoidprepareBeanFactory(ConfigurableListableBeanFactory beanFactory){// Tell the internal bean factory to use the context's class loader etc.// 设置类加载器beanFactory.setBeanClassLoader(getClassLoader());// 设置Spel 表达式解析器,用于属性填充时对值进行表达式解析beanFactory.setBeanExpressionResolver...
public MyBean myBean() { MyBean myBean = new MyBean("hello", 10); log.info("向spring中注入成功 myBean"); return myBean; } // 通过@Bean 调用建造方法,生成Bean,本质和上面的方式差不多 @Bean public MyBean myBean2() { MyBean tom = MyBeanBuilder.getInstance() .withName("Tom") .w...
1 在开始定义我们自己的工厂bean之前,先介绍下FactoryBean这个接口类有哪些方法:T getObject():返回实际工厂bean创建的bean实例,如果是单实例,会放到spring的缓存池中boolean isSingleton():返回bean实例的作用域是singleton还是prototype。Class<T> getObjectType():返回工厂创建的bean类型。2 首先创建一个简单书本...
2、FactoryBean 一般情况下,Spring通过反射机制利用<bean>的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂, 如果按照传统的方式,则需要在<bean>中提供大量的配置信息。配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。
publicinterfaceBeanFactory{// 该常量用来区分是获取FactoryBean还是FactoryBean的createBean创建的实例.如果&开始则获取FactoryBean;否则获取createBean创建的实例.// 备注,此常量课时定义在BeanFactory里面的哟,因为它属于Bean工厂的处理机制~~~StringFACTORY_BEAN_PREFIX="&";//===获取bean,这边可以实现单例,原型Object...
这个方法就是为当前上下文创建一个内部的bean工厂。每次调用refresh()方法是都会创建尝试创建。默认实现是创建一个DefaultListableBeanFactory。并通过getInternalParentBeanFactory()获取内部bean工厂来作为父级bean工厂。可以在子类中重写,例如自定义DefaultListableBeanFactory的设置。
在自定义类上使用@Component注解(将自定义对象交由Spring管理) 使用FactoryBean<T>灵活的创建出对象,然后使用XML或者@Component注解交由Spring管理。 使用@Bean注解(灵活的创建对象,并放入Spring容器中); 注:本质上Spring的IOC(控制反转),包含两步,一是创建出bean,二是将其放入到容器中。
打印的结果你一定很意外,因为我们的配置文件中我们注册的userService它的class为com.buydeem.factorybean.UserServiceFactoryBean,而我们通过getBean("userService")得到的却是UserService类型,而不是UserServiceBean类型。 因为FactoryBean是一个特殊的Bean。我们自定义的UserServiceFactoryBean实现了FactoryBean接口,该类型会...