Spring源码从入门到精通---@Autowired&@Qualtify(十一)

简介: Spring源码从入门到精通---@Autowired&@Qualtify(十一)

篇文章主要讲了@Value的赋值:普通赋值,@Value("#{}"),spEl表达式赋值,@Value("&{}")读取配置文件赋值:

Spring源码从入门到精通---@Value赋值(十)


这篇文章主要介绍spring的自动装配,DI依赖注入,各个组件赋值,完成在IOC容器的组件调用。常用的@Autowird按类型去ioc容器中找组件注解,与之对应的有个@Resource按名称注解以后在讲解。


1、@Autowired


1)、默认优先[按照类型]去ioc容器中找组件 AnnotationConfigApplicationContext.getBean(BookDao.class);

2)、若此类型在容器中找到两个以上组件,则加载此方法找默认的名称AnnotationConfigApplicationContext.getBean("bookDao");

3)、可以和@Qualifier("组件名")组合使用,直接指定组件名。

4)、加载的@Autowired(required=false)必须在容器中存在此组件,IOC容器不存在则报错,默认为true,也可以指定为false,则不会报错。

5)、@Primary注解也可以指定主加载的组件,这时候就默认加载此主键的组件,除非@Qualifier指定其他组件。

/**
 * @Autowired
 * Spring 的自动装配:DI依赖注入,各个组件之间的装配赋值,完成对IOC容器里各个对象之间赋值调用。
 * 1)、默认优先按照类型去ioc容器中找组件
 *
 * @author keying
 * @Autowired
 */
@Configuration
@ComponentScan(value = {"com.alibaba.controller","com.alibaba.service","com.alibaba.dao"})
public class ConfigOfAutowired {
}
@Controller
public class BookController {
    @Autowired
    private BookService bookService;
    public void print() {
        System.out.println(bookService);
    }
}
/**
 * @author keying
 * 加载进的ioc容器里的名字:默认首字母小写
 */
@Repository
public class BookDao {
}
@Service
public class BookService {
    @Autowired
    private BookDao bookDao;
    public void print() {
        System.out.println("BookService注入的bookDao:" + bookDao);
    }
    @Override
    public String toString() {
        return "BookService{" +
            "bookDao=" + bookDao +
            '}';
    }
}
public class IOCTestAutowired {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(
        ConfigOfAutowired.class);
    @Test
    public void test1() {
        //getBeanNames(applicationContext);
        BookService bookService = applicationContext.getBean(BookService.class);
        BookDao bookDao = applicationContext.getBean(BookDao.class);
        System.out.println("bookService:" + bookService);
        System.out.println("bookDao:" + bookDao);
        applicationContext.close();
    }

image.png

2、@Qualifier


问:如果一个对象在ioc里创建两个组件,一个叫bookDao1,一个叫bookDao2,默认先加载哪个呢,如果指定加载哪个就可以用到@Qualifier("bookDao2")。代码如下:

@Service
public class BookService {
    @Autowired
    @Qualifier("bookDao2")
    private BookDao bookDao;
    public void print() {
        System.out.println("BookService注入的bookDao:" + bookDao);
    }
    @Override
    public String toString() {
        return "BookService{" +
            "bookDao=" + bookDao +
            '}';
    }
}
/**
 * @author keying
 * 加载进的ioc容器里的名字:默认首字母小写
 */
@Repository
public class BookDao {
    private String lable = "1";
    public String getLable() {
        return lable;
    }
    public void setLable(String lable) {
        this.lable = lable;
    }
    @Override
    public String toString() {
        return "BookDao{" +
            "lable='" + lable + '\'' +
            '}';
    }
}
@Test
    public void test1() {
        //getBeanNames(applicationContext);
        BookService bookService = applicationContext.getBean(BookService.class);
        //BookDao bookDao = applicationContext.getBean(BookDao.class);
        System.out.println("bookService:" + bookService);
        //System.out.println("bookDao:" + bookDao);
        applicationContext.close();
    }

在Config配置文件里用@Bean注解新注册一个bookDao2组件,给BookDao类加一个lable字段,


1)、若加载的默认bookDao对象,则会打印lable为1

2)、若加载的bookDao对象,Autowird按类型加载,则需要用@Qualifier注解在BookService类指定加载的名称。

image.png

相关文章
|
26天前
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
589 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
2月前
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
183 0
|
2月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
279 70
|
18天前
|
Java 关系型数据库 MySQL
【Spring】【事务】初学者直呼学会了的Spring事务入门
本文深入解析了Spring事务的核心概念与使用方法。Spring事务是一种数据库事务管理机制,通过确保操作的原子性、一致性、隔离性和持久性(ACID),维护数据完整性。文章详细讲解了声明式事务(@Transactional注解)和编程式事务(TransactionTemplate、PlatformTransactionManager)的区别与用法,并探讨了事务传播行为(如REQUIRED、REQUIRES_NEW等)及隔离级别(如READ_COMMITTED、REPEATABLE_READ)。
90 1
|
2月前
|
存储 安全 Java
Spring Security 入门与详解
Spring Security 是 Spring 框架中的核心安全模块,提供认证、授权及防护功能。本文详解其核心概念,包括认证(Authentication)、授权(Authorization)和过滤器链(Security Filter Chain)。同时,通过代码示例介绍基本配置,如 PasswordEncoder、UserDetailsService 和自定义登录页面等。最后总结常见问题与解决方法,助你快速掌握 Spring Security 的使用与优化。
383 0
|
3月前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
6月前
|
存储 安全 Java
Spring Security 入门
Spring Security 是 Spring 框架中的安全模块,提供强大的认证和授权功能,支持防止常见攻击(如 CSRF 和会话固定攻击)。它通过过滤器链拦截请求,核心概念包括认证、授权和自定义过滤器。配置方面,涉及密码加密、用户信息服务、认证提供者及过滤器链设置。示例代码展示了如何配置登录、注销、CSRF防护等。常见问题包括循环重定向、静态资源被拦截和登录失败未返回错误信息,解决方法需确保路径正确和添加错误提示逻辑。
374 2
Spring Security 入门
|
5月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
214 7
|
5月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
1131 7
|
6月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
215 7
Spring Boot 入门:简化 Java Web 开发的强大工具