Spring---IOC/DI(一)

Spring--bean装配

装配方式:

xml显式装配
java显式装配
隐式bean返现机制和自动装配

推荐注解形式:

package com.spring.study.bean.soundsystem;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/***
 * 配置类:默认扫描当前类和其子包
 */
@Configuration
@ComponentScan
public class CDPlayerConfig {


    /**
     * 通过配置类去配置一个bean
     */
//    @Bean
//    public CompactDisc compactDisc(){
//        return new SgtPeppers();
//    }
}

package com.spring.study.bean.soundsystem;

public interface CompactDisc {
    void play();
}

package com.spring.study.bean.soundsystem;

import org.springframework.stereotype.Component;

/**
 * 添加一个bean注解,表示把这个类作为一个bean注入
 */
@Component
public class SgtPeppers implements CompactDisc {

    private String title = "Musics";
    private String artist = "Jay";

    @Override
    public void play() {
        System.out.println("Playing " + title + " by " + artist);
    }
}

package com.spring.study.bean;

import com.spring.study.bean.soundsystem.CDPlayerConfig;
import com.spring.study.bean.soundsystem.CompactDisc;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
@Slf4j
public class CDPlayerTest {
    @Autowired
    private CompactDisc compactDisc;

    @Test
    public void cdShouldBeNotNull(){
        Assert.assertNotNull(compactDisc);
    }

    @Test
    public void play(){
        log.info("Test cd play");
        compactDisc.play();
    }
}

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:c="http://www.springframework.org/schema/c"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--    xml形式注入bean-->
<!--    开启包扫描-->
    <context:component-scan base-package="com.spring.study.bean.xml"/>
    <bean id="xmlConfigDemo" class="com.spring.study.bean.xml.config.XmlConfigDemo"/>
<!--    构造器注入-->
<!--    <bean id="person" class="com.spring.study.bean.xml.config.constructor.collection.Person">-->
<!--        <constructor-arg index="0" value="Tom"/>-->
<!--        <constructor-arg index="1" value="12"/>-->
<!--        <constructor-arg index="2" ref="phone"/>-->
<!--    </bean>-->

    <!--    c:命名空间代替构造器注入-->
    <bean id="person" class="com.spring.study.bean.xml.config.constructor.Person"
          c:_0="Alice"
          c:_1="11"
          c:_2-ref="phone"/>

    <bean id="phone" class="com.spring.study.bean.xml.config.constructor.IPhone"/>

<!--    集合装配-->
<bean id="cardsCollection" class="com.spring.study.bean.xml.config.constructor.collection.CardsCollection">
<!--    空值-->
<!--    <constructor-arg><null/></constructor-arg>-->
    <constructor-arg>
        <list>
            <value>game-card1</value>
            <value>game-card2</value>
        </list>
    </constructor-arg>
    <constructor-arg>
        <set>
            <value>1</value>
            <value>2</value>
        </set>
    </constructor-arg>
    <constructor-arg>
        <list>
            <ref bean="cardUser"/>
        </list>
    </constructor-arg>
</bean>
<bean id="cardUser" class="com.spring.study.bean.xml.config.constructor.collection.CardUser"
c:name="Card-user"/>
<!--    setter注入-->
<!--    <bean id="customer" class="com.spring.study.bean.xml.config.setter.Customer">-->
<!--        <property name="drink" ref="tea"/>-->
<!--    </bean>-->
<!--    util:list模板-->
    <util:list id="queueNoList">
        <value>1</value>
        <value>2</value>
    </util:list>
<!--    p:命名空间-->
    <bean id="customer" class="com.spring.study.bean.xml.config.setter.Customer"
          p:drink-ref="tea"
          p:name="CUSTOMER-1"
          p:queueNo-ref="queueNoList"/>
    <bean id="tea" class="com.spring.study.bean.xml.config.setter.Tea"/>
</beans>
package com.spring.study.bean.xml.config;

public class XmlConfigDemo {
    private String words = "Hello spring beans";
    public void print(){
        System.out.println(words);
    }
}

package com.spring.study.bean;

import com.spring.study.bean.xml.config.XmlConfigDemo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:bean-config.xml")
@Slf4j
public class XmlConfigDemoTest {
    private XmlConfigDemo xmlConfigDemo;

    @Autowired
    public void setXmlConfigDemo(XmlConfigDemo xmlConfigDemo) {
        this.xmlConfigDemo = xmlConfigDemo;
    }
    @Test
    public void print(){
        log.info("Test xml config:");
        xmlConfigDemo.print();
    }
}

package com.spring.study.bean;

import com.spring.study.bean.xml.config.setter.Customer;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

@Slf4j
public class XmlConfigDemoTestWithApplicationContext {
    @Test
    public void testXmlBeanConfig(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean-config.xml");
//        XmlConfigDemo xmlConfigDemo = context.getBean(XmlConfigDemo.class);
//        xmlConfigDemo.print();

//        Person person = context.getBean(Person.class);
//        System.out.println(person);

//        CardsCollection cardsCollection = context.getBean(CardsCollection.class);
//        System.out.println(cardsCollection);
        Customer customer = context.getBean(Customer.class);
        customer.action();
        System.out.println(customer);
    }
}

Java和XML混合形式

// TODO
posted @ 2020-07-21 00:29  Dave-Mo  阅读(54)  评论(0)    收藏  举报