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的基础,等你真正开始写项目后,你会发现,这些东西都是最最基础的东西,很常用,也很简单。

目录
相关文章
|
1天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
11 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
|
1天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的美容预约管理系统
基于Java+Springboot+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的美容预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
12 3
基于Java+Springboot+Vue开发的美容预约管理系统
|
2天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的房产销售管理系统
基于Java+Springboot+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的房产销售管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
20 3
基于Java+Springboot+Vue开发的房产销售管理系统
|
1天前
|
存储 网络协议 Java
Java NIO 开发
本文介绍了Java NIO(New IO)及其主要组件,包括Channel、Buffer和Selector,并对比了NIO与传统IO的优势。文章详细讲解了FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel及Pipe.SinkChannel和Pipe.SourceChannel等Channel实现类,并提供了示例代码。通过这些示例,读者可以了解如何使用不同类型的通道进行数据读写操作。
Java NIO 开发
|
2天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
17 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
3天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
344 5
|
2天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
11 2
|
1月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
2月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
2月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
99 0