Spring-1依赖注入

2020-03-12  本文已影响0人  RyanHugo

IOC概念补充https://www.cnblogs.com/xdp-gacl/p/4249939.html

属性注入XML配置

<!-- class :通过反射的方式在IOC容器中创建bean,所以bean必须有无参数构造器
            id:容器中bean的唯一标识
     -->
    <!-- set依赖注入,必须有set方法 -->
    <bean id = "personbyset" class="test.Person">
        <property name="name" value="jerry"></property>
        <!-- 设为null -->
        <property name="age"><null></null></property>
        
        <!-- 内部 bean, 类似于匿名内部类对象. 不能被外部的 bean 来引用, 也没有必要设置 id 属性 -->
        <property name="address">
            <bean class="test.Address">
                <property name="address" value="tj"></property>
            </bean>
        </property>
</bean>

构造器注入

<!-- 构造器注入,必须有对应的参数的构造方法 -->
    <bean id = "person" class = "test.Person">
        <constructor-arg value="tom" name="name"></constructor-arg>
        <constructor-arg value="12"></constructor-arg>
        
    </bean>

一些XML的特殊配置

构造器按照参数类型注入、构造器按照位置类型注入 、特殊字符使用CDATA、引用外部bean

<!-- 构造器按照参数类型注入 -->
    <bean id = "personbytype" class = "test.Person">
        <constructor-arg value="tom1" type="java.lang.String"></constructor-arg>
        <constructor-arg value="12" type="java.lang.String"></constructor-arg>
    </bean>
    
    
    <!-- 构造器按照位置类型注入 -->
    <bean id = "personbyindex" class = "test.Person">
        <constructor-arg  index="1">
        
        <!-- 特殊字符使用CDATA -->
            <value><![CDATA[<shangh>]]></value>
        </constructor-arg>
        <constructor-arg value="12" index="0"></constructor-arg>
        <!-- 引用bean -->
        <constructor-arg><ref bean="address"/></constructor-arg>
    </bean>

集合属性

<bean id = "address" class="test.Address">
        <property name="address" ><value>bj</value></property>
    </bean>
    
    
    <!-- 配置bean的list -->
    <bean id = "users" class="test.Users">
        <property name="addresses">
            <list>
                 <!-- 引用外部bean -->
                <ref bean="address"/>
                <!-- 使用内部bean -->
                <bean class="test.Address">
                <property name="address" value="tj2222222"></property>
            </bean>
            </list>
            
        </property>
    </bean>

Person类

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

public class Person {

    public String name;
    public String age;
    public Address address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public Person(String name, String age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public Person(){
        
    }
    
    
    
    
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", address=" + address
                + "]";
    }
    public Person(String name, String age, Address address) {
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }
    public static void main(String[] args) {
//      获取IOC容器对象
        ApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml");
//      从IOC中获取bean实例
        Person p = (Person) c.getBean("person");
//      
        System.out.println(p);
        
        Person personbyset = (Person) c.getBean("personbyset");
        System.out.println(personbyset);

        
    }
}

Address类

public class Address {

    public String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Address [address=" + address + "]";
    }

    public Address() {
        
    }
}

User类

import java.util.List;

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

public class Users {

    public List<Address> addresses;

    public List<Address> getAddresses() {
        return addresses;
    }

    public void setAddresses(List<Address> addresses) {
        this.addresses = addresses;
    }

    @Override
    public String toString() {
        return "Users [addresses=" + addresses + "]";
    }   
    public Users() {}
    public Users(List<Address> addresses) {
        super();
        this.addresses = addresses;
    }
    
    public static void main(String[] args) {
//      获取IOC容器对象
        ApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml");
//      从IOC中获取bean实例
        Users u = (Users) c.getBean("users");
        System.out.println(u);
    }

}

上一篇下一篇

猜你喜欢

热点阅读