spring有两种类型的bean,一个是普通的bean,一个是工厂bean。

普通bean:在配置文件中定义bean就是返回的类型

工厂bean:在配置文件中定义bean可以和返回的类型不一样

  步骤:1创建类,让这个类作为工厂bean实现接口FactoryBean

     2.实现接口里面的方法,在实现的方法中定义返回的bean类型

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
 1 package com.me.zhuru;
 2 
 3 import org.springframework.beans.factory.FactoryBean;
 4 
 5 /**
 6  * @author sbr
 7  * @create 2020-11-09 22:23
 8  */
 9 public class MyBean implements FactoryBean<Course> {
10 
11     //设置返回bean的对象
12     public Course getObject() throws Exception {
13         Course course=new Course();
14         course.setCourseName("haha");
15         return course;
16     }
17 
18     public Class<?> getObjectType() {
19         return null;
20     }
21 
22     public boolean isSingleton() {
23         return false;
24     }
25 }
MyBean.java
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4        xmlns:util="http://www.springframework.org/schema/util"
5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
6                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
7         <bean id="myBean" class="com.me.zhuru.MyBean"></bean>
8 </beans>
bean7.xml
    @Test
    public void test8(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean7.xml");
        Course Course = context.getBean("myBean",Course.class);
        System.out.println(Course);

    }

 

 

需要注意的是在这里设置返回的对象

 

 

在测试类中也要相应的进行更改

 

 

  bean默认为单实例对象,也可以修改为多实例对象,例如不做特殊操作:

 

 

 在最先的代码中可以实例化两个对象并输出发现地址是一样的,因此默认为单实例对象。

设置为多实例

 

 这个scope不写默认为singleton,写了prototype就为多实例对象,测试:

运行相同的代码发现地址已经改变

 

 

 

另外singleton和prototype的区别:singleton在加载spring配置文件的时候就会创建单实例对象,而prototype,不是在加载spring配置文件的时候创建对象,在调用getBean方法的时候创建多实例对象。

 

6