建立Student.java
package com.lql.srping04; /** * @author: lql * @date: 2019.10.28 * Description: */ public class Student { private String name; private Integer age; @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } public Student() { } public Student(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
建立StudentFactoryBean.java
package com.lql.srping04; import org.springframework.beans.factory.FactoryBean; /** * @author: lql * @date: 2019.10.28 * Description: * Created with IntelliJ IDEA */ public class StudentFactoryBean implements FactoryBean<Student> { /** * * @return 返回bean的对象 * @throws Exception */ @Override public Student getObject() throws Exception { return new Student("张无忌",17); } /** * * @return 返回bean的类型 */ @Override public Class<?> getObjectType() { return Student.class; } /** * * @return 是否单例 */ @Override public boolean isSingleton() { return true; } }
配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="student" class="com.lql.srping04.StudentFactoryBean"></bean> </beans>
测试:
package com.lql.srping04; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author: lql * @date: 2019.10.28 * Description: */ public class StudetnTest { public static void main(String[] args) { ApplicationContext app = new ClassPathXmlApplicationContext("spring04.xml"); // Student student = app.getBean("studentfactory", Student.class); Student student = app.getBean("student", Student.class); System.out.println(student); } }
结果:
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@37bba400: startup date [Mon Oct 28 15:03:41 GMT+08:00 2019]; root of context hierarchy
十月 28, 2019 3:03:41 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring04.xml]
Student{name='张无忌', age=17}
需要注意的是:自定义的FactoryBean需要实现“FactoryBean”接口。返回实例则是getObject()返回的实例