2-3、bean的作用域生命周期,以及xml自动装配

2.10、bean的作用域

bean的作用域有两种,一种是单例模式,一种是多例模式。利用scope属性来设置。

<bean id="user" class="com.lu.Spring.pojo.User" scope="singleton"></bean>

<bean id="user" class="com.lu.Spring.pojo.User" scope="prototype"></bean>
属性值含义创建对象时机
singleton单例模式,只创建唯一一个对象IOC容器初始化时
prototype多例模式,可以创建多个对象。获取bean时

2.11、bean的生命周期

bean的具体生命周期:

  1. bean对象创建(调用无参构造)
  2. 给bean对象属性赋值(依赖注入)
  3. bean初始化之前的操作(bean的后置处理器负责)
  4. bean对象初始化(需指定初始化方法)
  5. bean初始化之后的操作(bean的后置处理器负责)
  6. bean对象就绪
  7. bean对象销毁(需指定销毁方法)
  8. IOC容器关闭

可以看到一个bean对象初始化到销毁要经过8个步骤,注意当IOC容器关闭时触发对象将其销毁。

当bean的作用域为prototype时,IOC容器关闭时对象也不会销毁。

2.12、FactoryBean

FactoryBean是一个接口,包含三个方法,其他类实现该方法后可以直接配置bean当作工厂类使用。

public class UserFactory implements FactoryBean<User> {
    public User getObject() throws Exception {
        return new User();
    }

    public Class<?> getObjectType() {
        return User.class;
    }

//    public boolean isSingleton() {
//        return true;
//    }
}
方法作用
getObject()返回工厂对应的类实例
getObjectType()返回工厂对应的类类型
isSingleton()返回的bean是否为单例模式,默认为true

在Spring配置文件中配置UserFactory则会将User类交给IOC容器

<bean id="UserFactory" class="com.lu.Spring.factory.UserFactory"></bean>
@Test
public void test() throws SQLException {
    //1.获取ApplicationContext
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    //2.获取指定类对象
    User user = applicationContext.getBean(User.class);

    System.out.println(user);

}

2.13、基于xml的自动装配问题

1、什么是自动装配

根据制定策略,在IOC匹配某一个bean自动为其类类型或者接口类型的属性赋值。

先来看看之前我们是怎么为其类类型或者接口类型的属性赋值的:

在这里插入图片描述

<bean id="userController" class="com.lu.Spring.controller.UserController" >
    <property name="userService" ref="userServiceImpl"></property>
</bean>

<bean id="userServiceImpl" class="com.lu.Spring.service.Impl.UserServiceImpl" ></bean>

可以看到我们通过ref属性手动为其装配。

我么接下来对xml文件中提供的两种常用的自动装配进行说明:autowire="byType"autowire="byName"

2、自动装配–autowire=“byType”

<bean id="userController" class="com.lu.Spring.controller.UserController" autowire="byType"></bean>

<bean id="userServiceImpl" class="com.lu.Spring.service.Impl.UserServiceImpl" ></bean>

为UserController类对应的bean配置autowire="byType"属性,则会自动在IOC容器中查找对应的bean为其类类型或者接口类型的属性赋值。

3、自动装配–autowire=“byName”

<bean id="userController" class="com.lu.Spring.controller.UserController" autowire="byName"></bean>

<bean id="userService" class="com.lu.Spring.service.Impl.UserServiceImpl" autowire="byName"></bean>

通过autowire="byName"自动装配有一个注意点,自动装配时将会通过属性名作为id在IOC容器中自动装配对应的bean。所以要注意IOC容器中对应bean的id要和属性名一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值