简化Spring的xml文件配置-注解装配

注解装配是Spring2.5后出现的一种有趣的装配方式。它本质上与在xml文件中使用autowire属性自动装配并没有太大区别,但是它允许更细粒度的自动装配,我们可以选择地标注一个属性来对其应用自动装配。


Spring是默认禁止注解装配,所以在使用它之前,我们要在Spring配置中开启它。最简单的启用方式是使用Spring的context命名空间配置中的<context:annotation-config>元素,

这里先介绍Spring3支持的三种注解,Spring4也出来了,还没来得及看,太菜了。

还是用之前的例子:

先写一个简单的Bean

class HelloBean{
    private String name;
    private int number;
    private Date date;
    
    public HelloBean(Date date, String name, int number) {
        this.date = date;
        this.name = name;
        this.number = number;
      }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**  
     * @param name the name to set  
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the number
     */
    public int getNumber() {
        return number;
    }

    /**  
     * @param number the number to set  
     */
    public void setNumber(int number) {
        this.number = number;
    }

    /**
     * @return the date
     */
    public Date getDate() {
        return date;
    }

    /**
     * @param date the date to set  
     */
    public void setDate(Date date) {
        this.date = date;
    }
    
}

1.使用@Autowired

首先要知道能用@Autowired标识的地方,@Autowired不仅可以标注setter方法,它还能标注需要自动装配Bean引用的任意方法,甚至可以标注构造器。同时,我们可以直接用@Autowired标注某个属性,并删除掉它的setter方法

注意:@Autowired其实执行的是按类型装配属性,也就是byType

在上面这个例子中,我们可以用@Autowired直接标注date属性,如下

@Autowired

private Date date;

默认情况下,如果没有bean能被装配到@Autowired所标注的属性或参数中,那装配就失败,抛出一个NoSuchBeanDefinitionException异常(这时候失败比将来抛出空指针要好)。但@Autowired有一个重要的required属性,它默认是true,也我们可以手动设为false,如下:

@Autowired(required=false)

private Date date;

此时,如果Spring没有找到类型为Date的bean,那就把date属性置为null。

同时还要注意,当使用 @Autowired来标识构造器时,只能有一个构造器可以将@Autowired的required设为true。


另一方面,如果有多个bean同时满足装配条件,@Autowired注解也是没有办法选择的,也会报错NoSuchBeanDefinitionException,此时就需配合使用@Qualifier注解

@Autowired(required=false)

@Qualifier("<span style="color:#FF0000;">date1</span>")

private Date date;

@Qualifie注解会所需满足条件的bean的范围,上面的例子中,@Qualifie注解尝试注入id为“date1”的bean


2.@Qualifie,自定义限定器的注解

Qualifie的意思就是限定词,修饰语。在这里,我们暂时只要记住它在上面那个例子中的用法就ok了。其实它的主要作用是用于创建一个自定义的限定器注解。

这个我暂时没有用到,所以就先不写啦,没用也等于没学。


3.@inject

@inject是JSR-330的核心部件,JSR-330是JCP发布java依赖注入规范,该规模让Java有了依赖注入模型。

@inject注解几乎可以完全替换Spring的@Autowired注解,也可以用来自动装配属性、方法和构造器,不同之处在于@inject没有required属性。

@inject也会像@Autowired由于匹配到多个bean导致歧义性,相对于@Autowired所对应的@Qualifie,@inject所对应的@Name。

@Inject

@Name("date1")

private Date date;


4.注解可以为Spring的Bean自动装配其他Bean的引用,我们同样能够使用注解来装配简单的值,有时候这个用的更多一些。Spring3.0引入了@Value,它是一个新的装配注解,可以让我们使用注解装配String类型的值和基本类型的值,例如int,boolean等。

@Value("小苹果")
private String song;

但是@Value真正强大之处在于它可以根据SqEL表达式来进行动态的求值计算,虽然我也没用到过。

@Value("#{systemProperties.myFavoriteSong}")
private String song;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值