加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

spring之自动装配的三种方式

发布时间:2020-12-15 01:13:25 所属栏目:大数据 来源:网络整理
导读:springIOC容器可以自动装配Bean,需要做的仅仅是在bean中的autowire属性里指定自动装配的方式。 ByType:根据类型自动装配。若IOC容器中有多个目标Bean类型一致的bean,在这种情况下,spring将无法判定那个bean最适合该属性,所以不能执行自动装配。 ByName

springIOC容器可以自动装配Bean,需要做的仅仅是在<bean>中的autowire属性里指定自动装配的方式。

ByType:根据类型自动装配。若IOC容器中有多个目标Bean类型一致的bean,在这种情况下,spring将无法判定那个bean最适合该属性,所以不能执行自动装配。

ByName:根据名称自动装配,必须将目标Bean的名称和属性名设置完全相同。

contructor:通过构造器自动装配,当Bean中存在多个构造器时,此种自动装配方式将会很复杂,不推荐使用,

Car.java

package com.gong.spring.beans.autowire;

public class Car {
    
    public Car() {
    }

     Car(String name) {
        this.name = name;
    }
    private String name;

     String getName() {
        return name;
    }

    void setName(String name) {
         name;
    }

    @Override
     String toString() {
        return "Car [name=" + name + "]";
    }
    
}

Address.java

 Address {
     String street;

     String getStreet() {
         street;
    }

     setStreet(String street) {
        this.street = street;
    }

    @Override
    return "Address [street=" + street + "]";
    }
    
}

Student.java

 com.gong.spring.beans.autowire;
import java.util.List;
 java.util.Map;

 Student {
    
     String name;
    private int age;
    double score;
     Car car;
     Address address;
     getAge() {
         age;
    }
    void setAge( age) {
        this.age = getScore() {
         score;
    }
    void setScore( score) {
        this.score = Car getCar() {
         car;
    }
     setCar(Car car) {
        this.car = Address getAddress() {
         address;
    }
     setAddress(Address address) {
        this.address = address;
    }
    @Override
    return "Student [name=" + name + ",age=" + age + ",score=" + score + ",car=" + car + ",address=" + address
                + "]";
    }
    
    
}

beans-autowire.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="car" class="com.gong.spring.beans.autowire.Car" p:name="baoma"></bean>
    <bean id="address" class="com.gong.spring.beans.autowire.Address" p:street="络南街道"></bean>
    <bean id="address2" class="com.gong.spring.beans.autowire.Address" p:street="珞狮街道"></bean>
    <!-- 
    <bean id="student" class="com.gong.spring.beans.autowire.Student" p:name="tom"
    p:age="12" p:score="99.00" p:address-ref="address" p:car-ref="car"></bean>
     -->
    <!-- 使用byName时,要装配的bean的名字要和类文件中的setter方法中的名字保持一致,若没有匹配的,则不装配 
    <bean id="student" 
    p:age="12" p:score="99.00" autowire="byName"></bean>
    -->
    <!-- byType根据bean的类型和当前Bean的属性自动装配,若IOC容器中有一个以上的bean可以匹配,则会抛出异常 -->
    <bean id="student" 
    p:age="12" p:score="99.00" autowire="byName"></bean>
</beans>

Main.java

 org.springframework.context.ApplicationContext;
 org.springframework.context.support.ClassPathXmlApplicationContext;

 Main {
    static  main(String[] args) {
        //1.创建spring的IOC容器对象
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-autowire.xml");
        2.从容器中获取Bean实例
        Student student = (Student) ctx.getBean("student"); 
        System.out.println(student.toString());
    }
}

XML配置里自动装配的缺点:

(1)自动装配将会装配Bean的所有属性,然而只需要装配个别属性时,自动装配就不够灵活;

(2)要么根据类型,要么根据名称自动装配,不能两者兼顾;

(3)一般而言,在实际项目中很少使用自动装配,因为与自动装配功能带来的好处相比,明确清晰的配置方式更有说服力;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读