使用 @Autowired 自动装配 Bean

@Autowired 注解自动装配具有兼容类型的单个 Bean属性

构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired 注解

默认情况下, 所有使用 @Autowired 注解的属性都需要被设置. 当 Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 若某一属性允许不被设置, 可以设置 @Autowired 注解的 required 属性为 false

默认情况下, 当 IOC 容器里存在多个类型兼容的 Bean 时, 通过类型的自动装配将无法工作. 此时可以在 @Qualifier 注解里提供 Bean 的名称. Spring 允许对方法的入参标注 @Qualifiter 已指定注入 Bean 的名称

@Autowired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配.

@Autowired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.

@Autowired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值

package com.learn.spring.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;import com.learn.spring.service.UserService;/*** 表现层的组件* * @Controller的作用:*     等价于在xml配置文件中: <bean id="userController" class="com.learn.spring.controller.UserController"></bean>* @Controller注解默认的id值是类名首字母小写,如果想要自己指定,可以使用value属性来指定* @Controller(value="id") / @Controller("id")*/
@Controller
//@Component
public class UserController {@Autowired(required=false)  // 默认情况下,required=true,代表@AutoWired标注的属性必须被装配.//可以改为required=false,有就装配,没有就算了.private UserService userService ;public void login(){System.out.println("UserController  login .....");userService.Handlelogin();}}
package com.learn.spring.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;import com.learn.spring.dao.UserDao;/*** 业务层的组件**/
@Service
public class UserService {/***@AutoWired 优先采用类型的匹配的方式进行bean的装配. 如果有多个类型兼容的bean匹配了,会使用*          属性名 与bean的id值进行匹配. */@Autowired@Qualifier("userDaoMyBatisImpl") //进一步的指定要装配的bean的id值.private UserDao userDao ;public void Handlelogin(){System.out.println("UserService  handleLogin ....");//处理登录的逻辑userDao.getUserByUsernameAndPassword();}
}
package com.learn.spring.dao;public interface UserDao {public void getUserByUsernameAndPassword();}
package com.learn.spring.dao;import org.springframework.stereotype.Repository;@Repository
public class UserDaoMyBatisImpl  implements UserDao{public void getUserByUsernameAndPassword(){System.out.println("UserDaoMyBatisImpl getUserByUsernameAndPassword......");}
}

@AutoWired具体解释相关推荐

  1. 演示如何使用application.yml文件

    Spring Boot基础实例3 项目目录如下 演示如何使用application.yml文件配置Spring Boot项目 创建的application.yml文件时由application.pro ...

  2. Spring5春天还是配置地狱

    # Spring笔记 ## 1.概述及IOC理论推导 #### 1.1 Spring简介 Spring : 春天 --->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spr ...

  3. 不得不知IOC和AOP

    学完spring很久了,以前复习过好几遍,可是最近再看发现还是有会忘的.所以干脆写下来方便以后自己复习,仅供个人学习使用. 一.spring概述 Spring的核心是一个轻量级(Lightweight ...

  4. Spring 注解 @Resource和@Autowired(转)

    鸣谢:http://my.oschina.net/u/216467/blog/205951 @Resource和@Autowired两者都是做bean的注入使用. 其实@Resource并不是Spri ...

  5. 在Spring Framework中@Inject和@Autowired有什么区别? 在什么条件下使用哪一个?

    本文翻译自:What is the difference between @Inject and @Autowired in Spring Framework? Which one to use un ...

  6. @Autowired注解与@resource注解的区别(十分详细)

    背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻 ...

  7. 不能执行autowired_想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做...

    生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...

  8. spring的注解开发@Component @Bean @Value @Autowired、@Qualifier @PropertySource @Configuration

    spring的注解开发 启动注解功能 启动注解功能 ⚫ 启动注解扫描,加载类中配置的注解项 ⚫ 说明: ◆ 在进行包所扫描时,会对配置的包及其子包中所有文件进行扫描 ◆ 扫描过程是以文件夹递归迭代的形 ...

  9. spring springboot websocket 不能注入( @Autowired ) service bean 报 null 错误

    spring 或 springboot 的 websocket 里面使用 @Autowired 注入 service 或 bean 时,报空指针异常,service 为 null(并不是不能被注入). ...

最新文章

  1. JS基础知识学习(一)
  2. Truncate a string
  3. 网站颜色搭配的好网站。
  4. 莉莉丝最新大作《末日余晖》首曝CG,揭秘美术制作幕后
  5. 七牛云php20m文件上传不了,七牛云存储 - 用php上传图片,我在本地测试,用php 接口,不成功...
  6. FreeSql (十六)分页查询
  7. python计算定积分_python编程通过蒙特卡洛法计算定积分详解
  8. html form表单提交验证
  9. 了解 Nginx 主要应用场景
  10. Python机器人-最简单的机器人答复
  11. 经济金融学之1宏观经济学
  12. dropbox无法访问后国内网盘对比选择
  13. oracle 列转行字符串,oracle 字符串列转行
  14. 论机器学习中数据的重要性
  15. 面对众多的在线打印平台该怎么选择?
  16. 最聪明的一款奔驰,试驾奔驰最新入门A-Class
  17. 909422229_宝塔linux面板防护CC设置
  18. Keil5使用第一步
  19. java开发中常用的SQL语句
  20. JSTL --图文并茂详解(全) 轻松掌握

热门文章

  1. Spring boot配置log4j输出日志
  2. [转]Sql Server 分页存储过程
  3. CentOS7 安装 Node.js
  4. ASP.NET基础代码备忘
  5. Qt之QStackedWidget
  6. ubuntu-14.04.2-desktop-i386.iso:ubuntu-14.04.2-desktop-i386:安装Oracle11gR2
  7. 基于读取车载RFID标签自动开关车库门c#算法实现
  8. [自己动手]让Editplus更好用
  9. 基于数据库的分布式锁实现
  10. 【整理】Linux常用命令