自动装配及Annotation

根据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();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值