Bean的作用域及自动装配

Bean的作用域

1.单例模式(spring默认机制) 取的是同一个对象

 <bean id="people" class="com.chen.People" scope="singleton" >
public class Test {
    public static void main(String[] args) {
        //获取spring的上下文对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        People people1 = applicationContext.getBean("people", People.class);
        People people2 = applicationContext.getBean("people", People.class);

        System.out.println(people1==people2);
    }
}

输出:

true

2.原型模式,每次从容器中get的时候,都会产生一个新对象

<bean id="people" class="com.chen.People" scope="prototype" ></bean>

输出:

false

3.其余的requestsessionapplication这些个只能在web开发中使用到。

Bean的自动装配

  • 自动装配是Spring满足bean依赖的一种方式。
  • Spring会在上下文自动寻找,并自动给bean装配属性!

在Spring中有三种装配的方式

  • 1.在xml中显示的配置
  • 2.在java中显示配置
  • 3.隐式的自动装配bean(下面讲)

例子:一个人主要有两个宠物

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="cat" class="chen.Cat"></bean>
    <bean id="dog" class="chen.Dog"></bean>
    <bean id="people" class="chen.People" autowire="byName">
        <property name="name" value="陈"></property>
        <property name="cat" ref="cat"></property>
        <property name="dog" ref="dog"></property>
    </bean>
</beans>

byName自动装配

会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanId;

    <!--    
    byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanId;
    -->
    <bean id="people" class="chen.People" autowire="byName">
        <property name="name" value="陈"></property>
    </bean>

byType自动装配

会自动在容器上下文中查找,和自己对象属性类别相同的bean;

    <!--
    byType:会自动在容器上下文中查找,和自己对象属性类别相同的bean;
    b
    -->
    <bean id="people" class="chen.People" autowire="byType">
        <property name="name" value="陈"></property>
    </bean>

注意点:

  • byName:需要保证所有beanid唯一,并且这个bean需要和自动注入的属性的set方法保持一致;
  • -byType:需要保证beanclass唯一,并且这个bean需要和自动注入的属性的set方法的值一致;
上一篇:mysql创建数据表时如何判断是否已经存在?


下一篇:实现对象的Symbol.itertor