首页 > 其他分享 >Bean

Bean

时间:2022-09-30 14:46:10浏览次数:38  
标签:容器 对象 ioc bean Bean FactoryBean IOC

1.Bean的作用域

在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围

<bean id ="user" class="com.bean.User" scope="prototype"></bean>

singleton:每次从ioc容器中获取到bean所对应的对象都是同一个

prototype:每次获取到的对象都不一样。在getBean()时创建对象。

2. Bean的生命周期

scope="singleton"时前三个生命周期在获取IOC容器时就执行,并不是在获取bean时来才执行。

scope="prototype"时前三个生命周期是在获取bean时来才执行,但销毁的方法不由ioc容器来管理。(每个创建的对象都不一样了)

(1)实例化,创建对象

IOC管理对象时是通过工厂模式和反射机制来创建对象,默认使用无参构造。

(2)依赖注入

为当前的属性赋值。

(3)初始化

在bean标签中设置 init-method来指定

<bean id="user" class="com.bean.User" init-method="initMethod" destory-method="destoryMethod">

(4)销毁(在IOC容器关闭时候销毁)

在测试中用 ClassPathXmlApplicationContext,使用.close()。

在bean标签中设置 init-method来指定

<bean id="user" class="com.bean.User" init-method="initMethod" destory-method="destoryMethod">

  bean的后置处理器会在生命周期的初始化前后添加额外的操作,需要实现BeanPostProcessor接口,且配置到IOC容器中,需要注意的是,bean后置处理器不是单独针对某一个bean生效,而是针对IOC容器中所有bean都会执行。

3. FactoryBean

bean工厂是ioc最基本的实现,作用是帮助我们管理bean,但factorybean是一个bean,需要交给ioc容器来管理。

  FactoryBean是Spring提供的一种整合第三方框架的常用机制。

和普通的bean不同,配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是getObject()方法的返回值。

通过这种机制,Spring可以帮我们把复杂组件创建的详细过程和繁琐细节都屏蔽起来,只把最简洁的使用界面展示给我们。 

FactoryBean是一个接口,需要创建一个类实现该接口

其中有三个方法:
   * getObject():通过一个对象交给IOC容器管理
   * getObjectType():设置所提供对象的类型
   * isSingleton():所提供的对象是否单例
当把FactoryBean的实现类配置为bean时,会将当前类中getObject()所返回的对象交给IOC容器管理

  创建类UserFactoryBean

public class UserFactoryBean implements FactoryBean<User> {
    @Override
    public User getObject() throws Exception {
        return new User();
    }
    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
}

   配置bean

<bean class="com.bean.UserFactoryBean"></bean>

   测试 

@Test
public void testUserFactoryBean(){
    //获取IOC容器
    ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-factorybean.xml");
    User user = ioc.getBean(User.class);
    System.out.println(user);
}

当把FactoryBean以一个bean的方式来配置时,把它所提供的对象(getObject()方法返回的对象)交给IOC容器管理。

标签:容器,对象,ioc,bean,Bean,FactoryBean,IOC
From: https://www.cnblogs.com/Joyce-mi7/p/16741605.html

相关文章