美文网首页
Spring自动装配以及bean的介绍

Spring自动装配以及bean的介绍

作者: BlueSkyBlue | 来源:发表于2020-03-18 11:43 被阅读0次

    XML配置里的Bean自动装配

    Spring IOC容器可以自动装配Bean。需要做的仅仅是在<bean>的autowrite属性里指定自动装配的模式。

    byType:根据类型装配。当IOC容器中有多个与目标Bean类一致的Bean,这种情况下,Spring将无法判断哪个Bean适合该属性。所以不能执行自动装配。
    byName:根据目标类的属性名装配。必须将目标Bean的属性名和名称设置的完全相同。
    constructor:通过构造器自动装配。当Bean中存在多个构造器时,此种自动装配方式很复杂,不推荐使用。

    Spring bean之间的关系

    继承

    这里的继承指的是配置上的继承。bean配置的继承使用bean的parent属性指定继承bean的那个配置。

    Spring允许继承bean的配置。被继承的bean称为父bean。继承自这个父bean的bean被称为子bean。子bean从父bean中继承了配置。包括bean的属性配置。子bean也可以覆盖从父bean继承过来的配置。

    父bean可以作为配置的模板也可以作为bean的实例。如果只想把父bean作为模板可以将<bean>的abstract属性设为true。这样Spring将不会实例化这个bean。

    并不是bean中的所有属性都会被继承。比如autowrite,abstract等。

    可以忽略父bean的class属性。让子bean指定自己的类。而共享相同的属性配置。但此时abstract必须设置为true。

    bean继承的实例:

    <bean id="address" class="com.spring.beans.Address"
              p:city="Beijing" p:street="Wudaokou">
    </bean>
    
    <bean id="address2" parent="address" p:street="Changan">
    </bean>
    

    依赖

    此时我们在Person类中加入地址的属性

    public class Person {
        private String name;
        private int age;
        private Address address;
    ...
        public void setAddress(Address address) {
            this.address = address;
        }
    ...
    

    配置文件

    <bean id="address" class="com.spring.beans.Address"
          p:city="Beijing" p:street="Wudaokou">
    </bean>
    
    <bean id="person" class="com.spring.beans.Person" p:name="Tom" p:address-ref="address">
    </bean>
    

    此时有了一个新的需求,要求配置Person时必须有一个关联的Car。换句话说Person这个bean依赖于Car这个bean。

    <bean id="car" class="com.spring.beans.Car" p:price="300000">
    </bean>
    
    <bean id="address2" parent="address" p:street="Changan">
    </bean>
    
    <bean id="person" class="com.spring.beans.Person" p:name="Tom" p:address-ref="address" depends-on="car">
    </bean>
    

    Spring允许用户通过depends-on属性设置bean的前置依赖的bean。前置依赖的bean会在本bean实例化之前创建好。

    如果前置依赖于多个bean,则可以通过逗号,空格的方式配置bean的名称。

    Spring bean的作用域

    singleton:容器初始化时创建bean的实例。在整个容器的生命周期只创建这样的一个bean。
    prototype:容器初始化时不创建bean的实例,而在每次请求时都创建一个新的bean实例并返回。
    Spring Bean当中的作用域默认为singleton。

    Spring使用外部属性文件

    在配置文件里配置bean时,有时需要在bean的配置里混入系统部署等细节信息(例如文件路径,数据源配置信息等)。而这些部署细节实际上要和bean配置相分离。

    Spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器。这个处理器允许用户将bean配置的部分内容外移到属性文件中。可以在bean配置文件里使用形式为${var}的变量。PropertyPlaceholderConfigurer从属性文件里加载属性,并使用这些属性来替换变量。

    Spring还允许在属性文件中使用${propName},以实现属性间的相互引用。

    如何引入外部资源文件

    <beans>中添加contextSchema定义。
    在配置文件中添加如下配置

    <context:property-placeholder location="classpath:db.properties"/>
    

    相关文章

      网友评论

          本文标题:Spring自动装配以及bean的介绍

          本文链接:https://www.haomeiwen.com/subject/gqexyhtx.html