文档章节

Spring bean配置基于注解的方式注入

javaART
 javaART
发布于 2017/05/28 00:30
字数 849
阅读 5
收藏 0

spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖。在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入。虽然@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区 别的。

首先来看一下:

 a) @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;

 b) @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;

c) @Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上

2、使用注解的方式,我们需要修改spring配置文件的头信息,修改部分红色标注,如下

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-2.5.xsd">
               
   <context:annotation-config/>
     
</beans>

3、修改以上配置文件的头信息后,我们就可以在Java代码通过注解方式来注入bean,看下面代码

(1)@Resource

public class StudentService3 implements IStudentService {
    // @Resource(name="studentDao")放在此处也是可行的
    private IStudentDao studentDao;

    private String id;

    public void setId(String id) {
        this.id = id;
    }

    @Resource(name = "studentDao")
    // 通过此注解完成从spring配置文件中查找名称为studentDao的bean来装配字段studentDao,
    //如果spring配置文件中不存在
    // studentDao名称的bean则转向按照bean类型经行查找
    public void setStudentDao(IStudentDao studentDao) {
        this.studentDao = studentDao;
    }

    public void saveStudent() {
        studentDao.saveStudent();
        System.out.print(",ID 为:" + id);
    }

}

配置文件添加如下信息

<bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>
<bean id="studentService3" class="com.wch.service.impl.StudentService3" />

(2)@Autowired

public class StudentService3 implements IStudentService {
        // @Autowired放在此处也是可行的
        private IStudentDao studentDao;

        private String id;

        public void setId(String id) {
            this.id = id;
        }

        @Autowired
        // 通过此注解完成从spring配置文件中 查找满足studentDao类型的bean
        // @Qualifier("studentDao")则按照名称经行来查找转配的
        public void setStudentDao(IStudentDao studentDao) {
            this.studentDao = studentDao;
        }

        public void saveStudent() {
            studentDao.saveStudent();
            System.out.print(",ID 为:" + id);
        }
    }

配置文件添加如下信息

<bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>
<bean id="studentService3" class="com.wch.service.impl.StudentService3" />

注:在java代码中可以使用@Autowire或者@Resource注解方式进行装配,这两个注解的区别是:


@Autowire 默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可 以结合@Qualifier注解一起使用;


@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属 性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找 依赖对象.

注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖的对象时候,会回退到按照类型装配,但一旦指定了name属性,就只能按照名称 装配了.

建议:  @Resource注解是又J2EE提供,而@Autowired是由spring提供,故减少系统对spring的依赖建议使用@Resource的方式;

本文转载自:

javaART
粉丝 1
博文 36
码字总数 12872
作品 0
昆明
后端工程师
私信 提问
最全的Spring面试题和答案

1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员...

流氓兔-
02/22
0
0
2014-03-10 Spring的学习(2)------依赖注入和自动扫描Bean

1.依赖注入(DI)的概念 所谓的依赖注入是指在运行期,由外部容器将依赖对象注入到组件中.依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它对象).例如:Service业务层依赖D...

查封炉台
2014/03/10
0
0
Spring面试题(70道,史上最全)

1.什么是spring? 2.使用Spring框架的好处是什么? 3.Spring由哪些模块组成? 4.核心容器(应用上下文)模块。 5.BeanFactory–BeanFactory实现举例。 6.XMLBeanFactory 7.解释AOP模块 8.解释J...

java技术栈
2017/11/08
0
0
Spring学习笔记1——基础知识

1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书《Expert one-on-one J2EE Design and Development》和《Expert one-on-one J2EE deve...

李长春
2011/10/09
0
0
Spring面试基本问题(1)

1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员...

yaohong
2016/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubernetes API 访问控制在阿里云容器服务(ACK)上的实践

提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷...

zhaowei121
24分钟前
1
0
从HelloWorld看Knative Serving代码实现

概念先知 官方给出的这几个资源的关系图还是比较清晰的: 1.Service: 自动管理工作负载整个生命周期。负责创建route,configuration以及每个service更新的revision。通过Service可以指定路由流...

迷你芊宝宝
24分钟前
1
0
如何防止http请求数据被篡改

故事的开始,面试官问了我一个问题: 如何防止http请求中数据被篡改? 回答: 1.设置客户端IP黑/白名单 1.1.客户端所有请求,请求到代理服务器(nginx),代理服务器维护黑/白名单的ip,决定是...

太猪-YJ
29分钟前
1
0
好程序员大数据笔记之:Hadoop集群搭建

在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天集中总结以下笔记,希望对各位同学...

好程序员IT
35分钟前
1
0
MySql用navcat连接时报错 2509

在8版本以后的MySql默认的加密方式都改为了caching_sha2_password 因此进入mysql的命令行更改加密方式即可 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER......

lanyu96
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部