文学起点网
当前位置: 首页 文学百科

springioc底层解析(看完这篇你还敢说)

时间:2023-07-10 作者: 小编 阅读量: 1 栏目名: 文学百科

也就是设计原则中的开闭原则和单一职责原则。其中最常见的方式叫做依赖注入,还有一种方式叫“依赖查找”。该服务是将会变成客户端的状态的一部分。传递服务给客户端,而非允许客户端来建立或寻找服务,是本设计模式的基本要求。由图可知,spring容器中的顶层接口是BeanFactory。如果没有无参构造函数则不能创建成功。destroy-method:指定类中销毁方法名称。它的作用范围就是整个引用。从外部引入的依赖可选择使用XML来创建bean。

一. 什么是IoC

1. 什么是耦合和内聚

所以在程序开发中应该尽量的降低耦合,提高内聚。也就是设计原则中的开闭原则和单一职责原则。

2. 工厂模式

工厂模式就是用来解决程序间耦合的一种设计模式。可以把所有要创建的对象放在工厂的一个集合里,当需要使用这个对象的时候,直接从工厂里面取出来用就行。

工厂模式的优点:

3. 控制反转(IoC)

控制反转在维基百科中的定义:

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递(注入)给它。

下面再从控制和反转两个词分两个方面来理解:

通过new方式来主动获取对象:

通过IoC容器获取对象(注意看箭头的方向,是不是反转了):

有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

4. 依赖注入(DI)

依赖注入在维基百科中的定义

在软件工程中,依赖注入是种实现控制反转用于解决依赖性设计模式。一个依赖关系指的是可被利用的一种对象(即服务提供端) 。依赖注入是将所依赖的传递给将使用的从属对象(即客户端)。该服务是将会变成客户端的状态的一部分。传递服务给客户端,而非允许客户端来建立或寻找服务,是本设计模式的基本要求。

其实依赖注入和控制反转表达的是一个意思。控制反转是一种思想,而依赖注入是这个思想的最典型的实现方法。

由IoC来控制对象的依赖,通过构造函数、变量或Setter等方法来将依赖注入到对象中,这样就将对象和对象的依赖进行了解耦。

二. Spring中的工厂类

我们常用的spring容器是ApplicationContext,先来看一下它的依赖结构。

由图可知,spring容器中的顶层接口是BeanFactory。ApplicationContext是它的子接口(注意这个也是个接口哦)。它默认一读取配置文件,就会创建对象放到容器中。再来看一下ApplicationContext的三个主要的实现类。

三. Bean的创建和管理

1. bean标签

作用 : 用于配置对象让spring来创建的。默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。

属性:

  • init-method:指定类中的初始化方法名称。
  • destroy-method:指定类中销毁方法名称。
  • 2. bean的作用范围和生命周期

    ①. 单例对象: scope="singleton"一个应用只有一一个对象的实例。它的作用范围就是整个引用。生命周期:

    ②. 多例对象: scope="prototype"每次访问对象时,都会重新创建对象实例。生命周期:

    四. spring中的注解

    1. 用于创建对象的


    相当于<bean id = "" class = "" />

    ①. @component

    ②.@Service 、@Repository 、@Controller他们都是对@Component注解的衍生,其实作用是一模一样的,只是提供了更明确的语义化。

    2. 用于注入数据的


    相当于<property name = "" ref = "" />或<property name= "" value = "" />

    ①. @Autowried

    作用:自动按照类型注入。当使用注解注入属性时,set 方法可以省略。它只能注入其他bean类型(ByType)。当有多个类型匹配时,使用要注入的对象变量名称作为bean的id (ByName) ,在spring容器查找,找到了也可以注入成功。找不到就报错。

    三种注入方式(属性输入、Setter注入、构造函数注入):


    /** * 使用变量注入依赖 */@Autowiredprivate IAccountDao accountDao ;/** * 使用构造器注入 spring推荐使用这个 * @param accountDao 要注入的依赖 */@Autowiredpublic AccountServiceImpl(IAccountDao accountDao) {this.accountDao = accountDao;}/** * 使用Setter注入 * @param accountDao 要注入的依赖 */@Autowiredpublic void setAccountDao(IAccountDao accountDao) {this.accountDao = accountDao;}

    ②. @Qualifier

    ③. @Resource

    ④. @Value

    3. 用于改变作用域的


    相当于<bean id = "" class = "" scope = ""/>中的scope属性

    ①. @Scope

    4. 生命周期相关的


    相当于<bean id = "" class = "" init-method = "" destory-method = ""/>中的init-method属性和destory-method属性

    ①. @PostConstruct

    作用:用于指定初始化方法

    ②. @PostDestory

    作用:用于指定销毁方法

    5. spring中的新注解

    ①. @Configuration

    ②. @ComponentScan

    ③. Bean

    ④. @PropertySource

    示例:


    @Configuration@PropertySource("classpath:jdbc.properties")public class JdbcConfig{}

    ⑤. @Import

    示例:


    @Configuration@ComponentScan(basePackages = "com.ncusoft.springDemos")@Import({ JdbcConfig.class })public class SpringConfiguration {}

    6. 选择XML还是注解?

    先来看一下各自的优势:

    应该根据实际的开发来选择使用(springboot推荐使用注解),一般在source code(源代码)中的类使用注解来创建bean(更方便,只需一个注解搞定)。从外部引入的依赖可选择使用XML来创建bean。


    ,
      推荐阅读
    • 荷塘月色简笔画彩图(荷塘的场景图简笔画)

      今日份简笔画荷塘月色.感恩日记1.,我来为整理几张简单漂亮的荷塘月色简笔画彩图?以下简笔画图片总有一款是你喜欢的,希望对你有帮助来看看吧!荷塘月色简笔画彩图今日份简笔画荷塘月色.感恩日记1.荷塘月色好看的儿童画图片儿童简笔画大全荷塘月色简笔画儿童画

    • 直硬头发软化前后效果图(头发软化前后效果图)

      可以使头发变软,变柔顺,变贴服,且价格也很便宜,普通的美发沙龙价格为50到80元左右,软化比较自然。头发软化后几天可以洗刚做完软化2至3天不要洗头,刚做完软化不要用力拉头发,会有损发质和效果。软化也是伤头发的,不过比不停地做一次性夹头发而言小很多,如果是短发做软化还是不错的。如果想让头发蓬蓬的,最好不要全头做软化,甚至不建议做软化。具体情况,建议咨询理发师。用药水要用好一点的,对头发伤害才不会很大。

    • 赞美运动员的话(赞美运动员的话有什么)

      年轻的我们自信飞扬,青春的气息如同出生的朝阳,蓬勃的力量如同阳光的挥洒此时此刻,跑道便是我们精彩的舞台,声声加油便是我们最高的奖项论何成功,谈何荣辱,心中的信念只有一个:拼搏,我来为大家科普一下关于赞美运动员的话?赞美运动员的话年轻的我们自信飞扬,青春的气息如同出生的朝阳,蓬勃的力量如同阳光的挥洒。所有的努力都是为了迎接这一刹那,所有的拼搏都是为了这一声令下。

    • 长安uni-k车主反映这款车怎么样(新车长安UNI-K登场)

      据长安汽车最新消息,中大型SUVUNI-K官图曝光,这是长安UNI系列的第二款车型。新车将搭载蓝鲸系列2.0T发动机并匹配8AT变速箱,将于广州车展首发亮相。新车亮点1.采用了全新的“V”型面设计和无边界格栅。新车概况新车前脸依然采用无边界设计并融入了V型面概念,不同于UNI-T,UNI-K的大灯位置设计在了最上方。车尾方面采用了时下流行的贯穿式尾灯设计,与UNI-T的V型后导流造型不同,UNI-K采用了新的航天器式造型,立式尾灯十分显眼。

    • 渡劫经典语录(关于渡劫的语录精选)

      情到深处人孤独,爱至穷时尽沧桑堕落的天使啊,你无知的游走着。我将于茫茫人海中访我唯一灵魂之伴侣;得之,我幸;不得,我命。玲珑骰子安红豆,入骨相思君知否。于千万人之中遇见你所遇见的人,于千万年时间无涯的荒野里,没有早一步,也没有晚一步,刚巧赶上了。生命是一朵千瓣莲花,我拒绝了绽放的同时,我也拒绝了枯萎和零落。就算哭泣也要皱眉优雅,就算失败也要转身潇洒。之后我也学会了阳奉阴违,发生了什么与我再无所谓。

    • 孤城闭什么时候上映(谁是主演)

      以下内容大家不妨参考一二希望能帮到您!孤城闭什么时候上映《孤城闭》将于2020年起在湖南卫视上映播出。该剧主要由王凯、江疏影、任敏、杨玏、边程、叶祖新、喻恩泰、王楚然、刘钧、孙坚等主演。《孤城闭》改编自米兰lady同名小说,以北宋为背景,在风起云涌的朝堂之事与剪不断理还乱的儿女情长之间,还原了一个复杂而真实的宋仁宗。

    • 大众朗逸所有灯图解(认识汽车灯图解)

      大众朗逸所有灯图解作为新手,汽车灯光就是一道难题,下面我们一起通过图解来认识一下汽车各种灯光吧。双闪灯的作用是当车辆发生意外情况后,引起其他车辆警惕,防止发生追尾事故。当踩下制动踏板后,制动灯立即亮起,并发出红色灯光,提醒后方车辆。倒车灯是白色,作用是为了照亮车尾的路面,减少倒车时盲区,另外也是对后方的提醒。

    • 雪里红的腌制方法(做雪里红腌菜的步骤)

      下面更多详细答案一起来看看吧!雪里红的腌制方法雪里红摘干净,根部用刀劈开,正一层反一层放入盆中,取盐均匀地洒在雪里红上,腌制1-2天。烧开水放凉,加盐,搅拌均匀,盐水倒入雪里红中泡制一天。泡好的雪里红捆成一小捆放入密封罐,倒入泡雪里红的盐水,盖好密封罐,即吃即取。

    • 郑州婚纱照推荐哪家好(郑州拍婚纱照团购)

      中国红喜嫁秀爆朋友圈的婚纱照中式婚纱照新中式婚纱照婚纱照风格高级感婚纱照婚纱照秀禾服的中式嫁衣,是完美诠释了东方女性温婉古典美。让人完全移不开目光~每一个女孩子都应该拥有这样华丽的喜嫁风太精致完全属于中式婚纱照的浪漫感~

    • 胎梦最准的位置(从胎梦看看你腹中的孩子给你暗示了吗)

      估计生完孩子和正在孕期的妈妈都会经历过这种事情,就是我们会经常做梦,而且会梦见一些动物植物什么的,这在老人眼里属于“胎梦”。你梦见的什么会预示着即将出生的宝宝是男孩还是女孩。你的胎梦准不准,来看看一下别人的胎梦。哈哈,看来有些胎梦还是挺准的,或许都是巧合吧,总之,宝宝来了就是我们的命中注定。