Spring 注解实现Bean依赖注入之@Required

注解实现Bean依赖注入

1  概述

 注解实现Bean配置,主要用来进行如依赖注入、生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的数据将覆盖基于注解配置中的依赖注入的数据

Spring3的基于注解实现Bean依赖注入支持如下三种注解:

  • Spring自带依赖注入注解: Spring自带的一套依赖注入注解;
  • JSR-250注解:Java平台的公共注解,是Java EE 5规范之一,在JDK6中默认包含这些注解,从Spring2.5开始支持。
  • JSR-330注解:Java 依赖注入标准,Java EE 6规范之一,可能在加入到未来JDK版本,从Spring3开始支持;
  • JPA注解:用于注入持久化上下文和尸体管理器。
这三种类型的注解在Spring3中都支持,类似于注解事务支持,想要使用这些注解需要在Spring容器中开启注解驱动支持,即使用如下配置方式开启:
java代码:

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation=" http://www.springframework.org/schema/beans  
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  
    <context:annotation-config/>  
  
</beans>  
 这样就能使用注解驱动依赖注入了


2  Spring自带依赖注入注解

一、@Required:依赖检查;

对应于基于XML配置中的依赖检查,但XML配置的依赖检查将检查所有setter方法;

基于@Required的依赖检查表示注解的setter方法必须,即必须通过在XML配置中配置setter注入,如果没有配置,在容器启动时会抛出异常,从而保证在运行时不会遇到空指针异常,@Required只能放置在setter方法上,且通过XML配置的setter注入,可以使用如下方式来指定:


java代码:

@Requried  
setter方法 



1、准备测试Bean

package cn.javass.spring.chapter12;  
public class TestBean {  
    private String message;  
    @Required  
    public void setMessage(String message) {  
        this.message = message;  
    }  
    public String getMessage() {  
        return message;  
    }  
}  

2、在Spring配置文件 添加如下Bean配置:
<bean id="testBean" class="cn.javass.spring.chapter12.TestBean">  
<property name="message" ref="message"/>  
</bean>  
<bean id="message" class="java.lang.String">  
    <constructor-arg index="0" value="hello"/>  
</bean>  

3、测试类和测试方法如下:
package cn.javass.spring.chapter12;  
//省略import  
public class DependencyInjectWithAnnotationTest {  
    private static String configLocation = "classpath:chapter12/dependecyInjectWithAnnotation.xml";  
    private static ApplicationContext ctx = new ClassPathXmlApplicationContext("configLocation");  
    //1、Spring自带依赖注入注解  
     @Test  
    public void testRequiredForXmlSetterInject() {  
        TestBean testBean = ctx.getBean("testBean", TestBean.class);  
        Assert.assertEquals("hello", testBean.getMessage());  
    }  
}  

在XML配置文件中必须指定setter注入,否则在Spring容器启动时将抛出如下异常:

org.springframework.beans.factory.BeanCreationException:  
Error creating bean with name 'testBean' defined in class path resource [chapter12/dependecyInjectWithAnnotation.xml]: Initialization of bean failed;  
nested exception is org.springframework.beans.factory.BeanInitializationException: Property 'message' is required for bean 'testBean' 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值