Spring-IOC综述

这篇具有很好参考价值的文章主要介绍了Spring-IOC综述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章迁移自语雀。

怎么查看spring的文档

Spring-IOC综述,Springboot,1024程序员节,spring,java,后端

ioc综述

说到spring的ioc,其实就是控制反转,为啥需要控制反转呢,其实是为了功能的增强,如果不用spring, 我们直接使用工厂方法,静态工厂方法, 都是是可以获取到对象的,但是如果需求变了,我们在类的生成时,添加了很多信息,使用工厂就不方便了,还有事务等需要统一的处理.一个典型的应用就是mybatis的接口,平时我们都是只需要写mybatis的接口,但是不写他的实现类,由spring生成一个代理的实现类,来进行方法的调用.对于事务的调用,在service上添加了事务,需要调用dao进行统一的控制.所以需要一个统一的bean对象的管理,就是ioc了,当然了,还可以使用google的juice.

说一点spring3和spring4的区别,spring3提供接口注入.

ioc注入

现在看spring ioc的文档, 5.2版本的文档,现在提供的注入方式有两种,构造方法和set方法注入.

如果使用xml进行配置,在写<bean>标签时,默认是使用的类型注入,就是default-autowired=byType

注解注入

说下我们经常使用的@Autowired注解

默认使用的是根据类型注入,如果类型没有找到,就根据属性名在去查找,找不到就报错了.

通过查看spring的源码,当把@Autowired写在属性上的时候,spring是使用的反射,获取该属性的Field,再进行值的设置,完成属性的注入.

@Resource注解可以指定bean的名字和类型,根据属性名注入,跟set方法的名字就没有关系了

自定义bean名字生成

最后说一个自定义bean的名字生成策略

BeanNameGenerator 接口

步骤如下:

1.自定义类实现BeanNameGenerator接口,重写方法

import org.springframework.beans.factory.config.BeanDefinition;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;

import org.springframework.beans.factory.support.BeanNameGenerator;

/**

* 自定义bean name的生成策略

*/

public class MyBeanNameGenerator implements BeanNameGenerator {

   @Override

   public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {

       String className = definition.getBeanClassName();

       System.out.println(className);

       int indexOf = className.lastIndexOf(".");

       if (indexOf != -1) {

           //前面加一个 my,其他的不做处理

           return "my"+className.substring(indexOf + 1, className.length());

       }

       return null;

   }

}

2.通过修改@ComponentScan  指定类名生成策略.

@ComponentScan(value = "com.onyx",nameGenerator = MyBeanNameGenerator.class)

再次运行spring就可以看到生成的bean 名字了.

测试代码如下, 就是个main方法:


public static void main(String[] args) {

AnnotationConfigApplicationContext context =

  new AnnotationConfigApplicationContext(AppConfig.class);

String[] names = context.getBeanDefinitionNames();

for (String name : names) {

 System.out.println(name);

}

}

获取application

如果想要获取到application对象,需要在类上实现接口implements ApplicationContextAware,

在类中定义变量ApplicationContext applicationContext 进行接收, 赋值.就可以使用了.

Lookup注解

说一个很特殊的应用场景,在一个类的每个方法中,需要使用的类,每次使用的类都要求是不同的对象,每用一次相当于new 一次, 这个时候需要使用到@LookUp("userDao") 注解,使用的方法上加上,每个方法获取的dao就会一个新的对象,而不是一个单例的dao重用.此注解只能加上方法上.使用方法省略,需要的时候再去具体看吧.

spring bean生命周期回调

InitializingBean初始化接口

DisposableBean销毁对象的接口

注解:

@PostConstruct

@PreDestroy

一个类实现此接口使用使用到具体的回调方法.也可以使用xml的配置,在<bean>标签中使用init-method=init 初始化方法

spring还存在@DependsOn 注解, 表明此类的生成需要依赖的其他的一个类的步骤.

spring扫描

@ComponentScan  中可以配置 filter等过滤信息,只扫描需要的类,加快spring的启动速度.里面有一套扫描的形式

还有另外一个方法,添加一个依赖.

<dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-context-indexer</artifactId>

   <version>5.2.3.RELEASE</version>

   <optional>true</optional>

</dependency>

这个依赖会加快spring的启动速度.

Primary注解

前段时间做项目,我们项目经理用的eclipse,他启动项目一定要加上@Primary 注解, 否则启动报错,我做的这个项目,我就纳闷了, 我的一个接口就一个实现类,不可能有重名的,不知道eclipse有什么bug,我用idea启动完全没问题.

一个接口,两个实现类,其他地方根据接口注入了,如果不做修改会报错,说找到了两个类.

解决办法 在一个类上标记@Primary  或者使用@Qualifier ,名字做区分.

@Profile

各种环境中类的实例化,类上添加,

激活@Profile.  

context.getEnvironment().setActiveProfile("....")

好处就是可以自由的切换类, 配置文件.

spring-jdbc 通用链接,自己做测试用.

spring的循环依赖

修改了application, 之后需要重新reshesh一下.

什么时候用xml

什么时候用注解

什么时候用java config

根据项目来,如果想精通spring,就三者混合这来.

不得不说写总结性的文章真的好要时间,写这个文章的时候,程程刚在睡觉,那时候刚过10点,现在都11点了,只希望疫情能够早点结束,早日能够看到她,我的心情就像外面的濛濛细雨一样,外面的天空是灰蒙蒙的,哎.

2020年2月14日11:08:02文章来源地址https://www.toymoban.com/news/detail-774481.html

到了这里,关于Spring-IOC综述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

    Spring实战系列文章: Spring实战 | Spring AOP核心秘笈之葵花宝典 Spring实战 | Spring IOC不能说的秘密? 国庆中秋特辑系列文章: 国庆中秋特辑(八)Spring Boot项目如何使用JPA 国庆中秋特辑(七)Java软件工程师常见20道编程面试题 国庆中秋特辑(六)大学生常见30道宝藏编程面试题

    2024年02月08日
    浏览(76)
  • 1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月08日
    浏览(50)
  • 1024 程序员节,圆一个小小的梦

    Hope is a good thing, maybe the best of things, and no good thing ever dies. 希望是件美丽的东西,也许是最好的东西,而美好的东西是永远不会消逝的。 大家好,我是勇哥 。 1024 , 程序员节,圆了我一个小小的梦。 花了半年时间,我写了一本电子书 ,书名是:《 RocketMQ4.X设计精要 》,我想

    2024年02月08日
    浏览(66)
  • 程序员帮助程序员!用1024拼出更美好的云计算未来

    中国的云计算市场是全球增长最快的。据预测,中国公共云服务市场的全球份额将从 2020 年的 6.5% 增加到 2024 年的 10.5% 以上。 伴随行业的迅速发展,催生了云计算相关人才需求的井喷增长,供需矛盾凸显。据德意志银行分析报告,越来越多IT企业关闭了线下IDC,开始把业务迁

    2024年02月16日
    浏览(56)
  • 解决github ping不通的问题(1024程序员节快乐!

    1024程序员节快乐!( 随便粘贴一个文档,参加活动 域名解析(域名-IP):https://www.ipaddress.com/ Ubuntu平台 github经常ping不通或者访问缓慢,方法是更改hosts文件 在hosts里添加github的ip 140.82.114.4 www.github.com 199.232.5.194 github.global.ssl.fastly.net 54.231.114.219 github-cloud.s3.amazonaws.com 可以访

    2024年01月18日
    浏览(77)
  • 好用且免费的CodeWhisperer,给1024程序员节送礼来了

          国庆期间没有胆量去人从众的景点,关在家里刷手机时意外在亚马逊的User Group公众号上发现了CodeWhisperer这么个好东西(bu yao qian),以后撸代码也可以提高生产力(fang yang mo yu)了,这还不赶紧上手试一下。看官方介绍说它支持流行的IDE开发工具,包括VS Code、Intelli

    2024年02月08日
    浏览(47)
  • 1024程序员节带你玩转图片Exif信息获取之JavaScript

    目录 一、前言 二、背景 三、Exif.js          1、Exif.js 简介 2、Exif.js 引入 四、多场景展示数据获取 1、原始图片直接获取  2、base64 编码文件加载  3、文件上传的方式加载  五、总结        1024是2的十次方,二进制计数的基本计量单位之一。1G=1024M,而1G与1级谐音,也有一

    2024年02月20日
    浏览(56)
  • 1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月07日
    浏览(80)
  • 1024程序员狂欢节 | IT前沿技术、人工智能、数据挖掘、网络空间安全技术

    一年一度的1024程序员狂欢节又到啦!成为更卓越的自己,坚持阅读和学习,别给自己留遗憾,行动起来吧! 那么,都有哪些好书值得入手呢?小编为大家整理了前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术,四大热点领域近期

    2024年02月06日
    浏览(64)
  • 1024程序员节?我们整点AI绘图玩玩吧,一文教你配置stable-diffusion

    需提前准备:一台高性能的电脑(尤其是显存)、python、Git、梯子。 其实Github上有很多关于Stable diffusion的库,综合对比之后,我选取的是比较全面的AUTOMATIC1111这个,源码链接:Stable-diffusion(Github) 找到安装那块的教程,此教程以windows为例。 ps:如果你电脑上已经有了pyt

    2024年01月16日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包