Java开发 - Spring框架初体验(三)

简介: Java开发 - Spring框架初体验
package cn.codingfire.spring; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
@Controller 
public class UserController { 
    @Autowired //使用了自动装配的注解 
    private UserMapper userMapper; 
    public void registor() { 
        userMapper.insert(); //这里调用了userMapper属性的方法 
    }
}

看到没?看到没?userMapper我们没有自己初始化,但我就是可以在注册方法中使用它的insert方法,有点小激动,有木有?


测试部分不再贴了,大家可以复制代码自行尝试下,注意包名,千万要写自己的包名,也可以按照博主的包名来创建。


关于@Autowired注解,作用就是自动装配,体现为,当某个属性需要被Spring注解装配值时,在属性之前添加此注解,另外,此注解可以添加在setter方法,构造方法之前,用于在存在多个构造方法的情况下,执行加了此注解的方法,这里也不再多讲了,等你成为一只老鸟,你会在很多地方看到这种用法,但通常我们不需要这么做。


对方法的参数自动装配时,如果方法有多个参数,各参数的先后顺序是不重要的。


关于@Autowired的装配机制,它会根据需要装配的数据的类型,在 Spring容器中统计匹配的Bean(对象)的数量 。


当匹配的Bean数量为0个时,判断@Autowired注解的required属性值,true(默认):装配失败,启动项目时即抛出NoSuchBeanDefinitionException,若是设置为false:放弃自动装配,不会报告异常,使用此属性时,会出现NPE ,即null异常。


当匹配的Bean数量为1个时,将直接装配,并装配成功。


当匹配的Bean数量为多个时:自动尝试按照名称实现装配,存在与属性名称匹配的Spring Bean时装配成功,不存在时装配失败,会抛出NoUniqueBeanDefinitionExcept。


补充


IoC与DI


IoC(Inversion of Control:控制反转)是Spring框架的核心,在传统的开发模式下,是由开发者创建对象、为对象的属性赋值、管理对象的作 用域和生命周期等,所以,是开发者拥有“控制权”,当使用了Spring之 后,这些都交给Spring框架去完成了,开发者不必关心这些操作的具体实现,所以,称之为“控制反转” 。


DI(Dependency Injection:依赖注入)是Spring框架实现IoC的核心实现,当某个类中声明了另一个类的属性(例如在UserController类中声明 了UserMapper类型的属性),则称之为依赖(即UserController依赖了 UserMapper),Spring框架会帮你完成依赖项的赋值,称为注入。


@Qualifier注解


此注解用于在自动装配中指定beanName,在同时存在多个类型匹配的bean时才会用得到,一般来说,我们不太会让这种情况发生,谁也不想给自己找事不是?具体表现为:

@Controller 
public class UserController { 
    @Autowired 
    @Qualifier("userMapper") 
    private UserMapper mapper; 
    public void registor() { 
        mapper.insert(); 
    } 
}

这里要解说下,自动装配,Bean注解这些,名字是有要求的,要和类名的首字母小写后一致,若是我不想用呢?就可以用mapper,但是我通过Qualifier注解来指定正确的名字,这样也是可以的。总感觉这么做会比较累,大家看看就好,实际开发中不要这么做,把自己搞乱了就不好了。


@Resource注解


先尝试根据名称进行装配(即:要求属 性名称与beanName相同),如果失败,则尝试根据类型装配,如果不存此在类型的Bean,则抛出NoSuchBeanDefinitionException,如果只有1 个匹配类型的Bean,则装配成功,如果匹配类型的Bean超过1个,则抛出NoUniqueBeanDefinitionException。


这里说的都是特殊情况,实际开发中,其实很难出现两个相同的Bean,我们不会给自己找不痛快。


和@Autowired,@Resource区别:


@Autowired可以添加在构造方法的声明之前,@Resource不可以

@Resource可以添加在类的声明之前(但不会装配属性的值),@Autowired不可以

如果有多个同类型的Bean时,@Autowired需要通过@Qualifier指定beanName,而@Resource可以 直接配置name属性以指定beanName。

当装配方法的参数时(例如添加了@Autowired的构造方法的参数),@Autowired仍可使用@Qualifier指定beanName,而@Resource无法解决此问题


未提到的内容


阿西吧,写了好久啊,感觉还是有些遗漏的,后续博客慢慢补充吧。遗漏部分,个人认为比较重要的:

AOP

Spring Bean生命周期

还有一些细碎的知识,后续的内容中都会根据实例进行说明,这里两块内容其实很大很多,结合实例来说比较好,暂时不在这里进行说明,掌握了这些,Spring框架你已经可以使用一些基础功能了。


结语


可能在所有的写Spring的博主中,我写的不是最好的,但我也是一步步学的Java,也经历过从什么都不懂到上手写项目。道路千条万条,适合自己的才是最好的。这些内容只是Spring的基础,等你真正开始写项目后,你会发现,这些东西都是最最基础的东西,很常用,也很简单。

目录
相关文章
|
13天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
9 2
|
6天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
18 4
|
8天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
29 4
|
13天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
61 1
|
7天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
14 0
|
8天前
|
Java API Android开发
kotlin和java开发优缺点
kotlin和java开发优缺点
21 0
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
161 2
|
6天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
18 2
 SpringBoot入门(7)- 配置热部署devtools工具