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

浙公网安备 33010602011771号