根据Set方法注入
<bean id="scremDriver" class="cn.test.controller.StraightHeader" outowire="byName"> </bean>
- 自动装配
- byName:根据Bean名称
- byType:根据Bean类型
- constructor:构造函数,根据类型
1、默认装配
默认装配需要通过 ‘ref’ 属性来连接 bean。
<bean id="Car" class="com.common.Car">
<property name="wheel" ref="wheel" />
</bean>
<bean id="wheel" class="com.common.Wheel" />
2、按属性名称自动装配 “byName”
这种装配方式要求“wheel” bean的名称是与“car” bean 的属性(“wheel”)名称相同。这样,Spring会自动通过setter方法将其装配。
<bean id="car" class="com.common.Car" autowire="byName" />
<bean id="wheel" class="com.common.Wheel" />
3、按属性的数据类型自动装配 “byType”。
在这种情况下,由于“Wheel” bean中的数据类型是与“car” bean的属性(Wheel对象)的数据类型一样的,所以,Spring会自动通过setter方法将其自动装配。
注意:在类型的自动装配模式,就必须确保只有Bean 只有一个唯一的数据类型声明。
<bean id="car" class="com.common.Car" autowire="byType" />
<bean id="wheel" class="com.common.Wheel" />
4、通过构造函数参数的数据类型按属性自动装配 “constructor”
在这种情况下,由于“wheel” bean的数据类型与“car” bean的属性(Wheel对象)的构造函数参数的数据类型是一样的,所以,Spring通过构造方法自动装配 。
<bean id="car" class="com.common.Car" autowire="constructor" />
<bean id="wheel" class="com.common.Wheel" />
5、通过自动检测自动装配 “autodetect”
就是第三和第四种方法的结合,如果默认的构造函数提供,自动检测将构造自动装配。如果没有找到默认的构造函数,自动检测将按类型选择装配。
Annotation
@Component:定义Bean
@Value:propertiese注入
@Autowired & @Resource :自动装配依赖
@PostConstruct & @PreDestroy:生命周期回调
package cn.test.controller;
public interface Header {
public void doWord();
public String getInfo();
}
package cn.test.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("header")
public class StraightHeader implements Header {
@Value("${color}")
private String color;
@Value("${size}")
private int size;
@Override
public void doWord() {
System.out.println("doWord");
}
@Override
public String getInfo() {
return "StraightHeader-----color:"+color+"--- SIZE:"+size;
}
}
package cn.test.controller;
import org.springframework.beans.factory.annotation.Autowired;
public class ScrewDriver {
@Autowired
private Header header;
public void user() {
System.out.println("User header"+header.getInfo());
header.doWord();
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/cren")
public class TestContainer {
@RequestMapping("/test")
public static void main(String [] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Header header = context.getBean("header", StraightHeader.class);
System.out.println(header.getInfo());
ScrewDriver screwDriver = context.getBean("screwDriver",ScrewDriver.class);
screwDriver.user();
}
}