文档章节

【58】Spring总结之注解(2)

fengsehng
 fengsehng
发布于 2016/11/09 09:15
字数 727
阅读 0
收藏 0

启用注解配置:

1.context:annotation-config

该配置表示启用注解。

2.context:component-scan base-package=”.

该配置表示扫描哪些包下的注解,该配置隐式注册了多个对注解进行解析的处理器,其中包括了配置项里面的注解所使用的处理器。所以,在配置了以后,就不用再配置。

注解类:

@Component、@Repository、@Service、@Controller、

@Service:用于标注业务层组件。
@Repository:用于标注数据访问组件,即DAO组件。
@Controller:用于标注控制层组件,如Struts中的Action。
@Component:泛指组件,当组件不要好归类时,可以使用这个注解进行标注。

Autowired和Resource

建议使用Resource

@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。

类的实现1--对成员变量进行标注:

public class UserServiceImpl implements IUserService {



    @Autowired 

private UserDao userDao;

……

}

类的实现2--对方法进行标注:

public class UserServiceImpl implements IUserService {



    private UserDao userDao;



    @Autowired 

    public void setUserDao(UserDao userDao) {  

        this.userDao = userDao;  

}

}

required,Qualifier和autoWrite配合

autoWrite默认按照类型来装配

如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。

1) 可能存在多个UserDao实例

Java代码:

    @Autowired

    public void setUserDao(@Qualifier("userDao") UserDao userDao) {

       this.userDao = userDao;

    }

这样,Spring会找到id为userDao的bean进行装配。

2) 可能不存在UserDao实例

Java代码:

    @Autowired(required = false)

    public void setUserDao(UserDao userDao) {

       this.userDao = userDao;

    }

Resource

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

@Resource装配顺序

如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;

如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;

如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;

如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(见2);如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配。

参考:
http://jiaxiaoyuan1204.blog.163.com/blog/static/65553152011350147451/
http://yedward.net/?id=339

我的微信二维码如下,欢迎交流讨论

这里写图片描述

欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

这里写图片描述

© 著作权归作者所有

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
私信 提问
SpringBoot基础教程3-1-1 简单定时任务方法介绍

1 概述 定时任务,特定的时间执行任务,在项目中普遍使用。本文介绍简单的无状态无持久化的定时任务实现方式;,,。 2 实现方式 自带的;通过调度的方式 让程序按照某一个频度执行,但不能在...

Mkeeper
09/29
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 bean初始化及销毁你必须要掌握的回调方法。

spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作。 初始化的时候实现的方法 1、通过java提供的@PostConstruct注解; 2、通过实现spring提供的InitializingBean接口,并重写...

java技术栈
2017/08/13
0
0
spring学习笔记-依赖注入

学习过程访问的地址,按顺序理解: Spring@Autowired注解与自动装配 spring四种依赖注入方式 Spring注解注入 context:component-scan使用说明 详细:Spring零配置通过注解实现Bean依赖注入总...

KeepMoving
2015/03/03
0
0
Spring AOP 对Spring MVC的Controller切面拦截不起作用

当使用Spring AOP对Controller层的Controller类的方法进行切面拦截,不起作用。AOP配置没有任何问题。 Spring AOP配置没有任何问题;【正常】 断点调试:Spring源码断点调试,在调用Control...

陶邦仁
2015/11/02
0
2

没有更多内容

加载失败,请刷新页面

加载更多

当S8遇上边缘计算:谈阿里云ENS对直播业务场景的支撑

摘要: 类似S8赛事这样的大型活动直播的特点和技术挑战是什么?为什么业务要下沉到边缘?自建边缘节点和与云服务厂商合作到底该如何选择?边缘节点服务(ENS)又是如何进行技术支撑?提供的针...

阿里云官方博客
27分钟前
5
0
supervisor安装配置

supervisor安装配置 安装 wget -c https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gztar -zxvf su......

jackmanwu
38分钟前
1
0
laravel定时器

民间高手: https://blog.csdn.net/zhezhebie/article/details/79205414 官方文档: https://laravel-china.org/docs/laravel/5.5/scheduling/1325...

vio小黑
今天
0
0
Apache Zeppelin安装及使用

Apache Zeppelin官网:http://zeppelin.apache.org/ Apache Zeppelin介绍:A web-based notebook that enables interactive data analytics. You can make beautiful data-driven, interacti......

GordonNemo
今天
5
0
关于python开发多个项目环境配置Anaconda

关于Anaconda用来管理Python的包和环境 下载并安装Anaconda 创建项目:windows键+R ==> 进入CMD => 输入conda create -n 项目名称 python=3 conda info -e 查看项目以及项目所在的位置,默认...

上官清偌
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部