Spring学习总结:IOC基础,育婴师面试技巧和注意事项

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

测试类

package com.kevin.spring.demo2.test;

import com.kevin.spring.demo2.entity.Person;

import com.kevin.spring.demo2.entity.Student;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] args) {

ApplicationContext ctx = new ClassPathXmlApplicationContext(“student.xml”);

Person kevin = ctx.getBean(“kevin”, Student.class);

Person maomao = ctx.getBean(“maomao”, Student.class);

System.out.println(maomao);

System.out.println(kevin);

}

}

输出

信息: Loading XML bean definitions from class path resource [student.xml]

Student{height=100, name=‘maomao’}

Student{height=170, name=‘kevin’}

通过属性赋值

Animal

package com.kevin.spring.demo3.entity;

/**

  • 动物

*/

public class Animal {

/**

  • 动物名称

*/

private String name;

public Animal() {

}

public Animal(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return “Animal{” +

“name='” + name + ‘’’ +

‘}’;

}

}

animal.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:p=“http://www.springframework.org/schema/p”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>

测试

package com.kevin.spring.demo3.test;

import com.kevin.spring.demo3.entity.Animal;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

  • 测试类

*/

public class Test {

public static void main(String[] args) {

ApplicationContext ctx = new ClassPathXmlApplicationContext(“animal.xml”);

Animal dog = ctx.getBean(“dog”,Animal.class);

Animal cat = ctx.getBean(“cat”,Animal.class);

System.out.println(cat);

System.out.println(dog);

}

}

输出结果

信息: Loading XML bean definitions from class path resource [animal.xml]

Animal{name=‘cat’}

Animal{name=‘dog’}

对象引用

Tyre

package com.kevin.spring.demo4.entity;

/**

  • 轮胎

  • @author: kevin

  • @Date: 2018/12/8

*/

public class Tyre {

private String name;

public Tyre(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return “Tyre{” +

“name='” + name + ‘’’ +

‘}’;

}

}

Car

package com.kevin.spring.demo4.entity;

/**

*/

public class Car {

private String name;

private Tyre tyre;

public Car(String name, Tyre tyre) {

this.name = name;

this.tyre = tyre;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Tyre getTyre() {

return tyre;

}

public void setTyre(Tyre tyre) {

this.tyre = tyre;

}

@Override

public String toString() {

return “Car{” +

“name='” + name + ‘’’ +

“, tyre=” + tyre +

‘}’;

}

}

测试

package com.kevin.spring.demo4.test;

import com.kevin.spring.demo4.entity.Car;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] args) {

ApplicationContext ctx = new ClassPathXmlApplicationContext(“car.xml”);

Car bike = ctx.getBean(“bike”, Car.class);

System.out.println(bike);

}

}

输出结果

信息: Loading XML bean definitions from class path resource [car.xml]

Car{name=‘bike’, tyre=Tyre{name=‘自行车轮胎’}}

对象作用域

在大多数情况下,单例bean是很理想的方案。初始化和垃圾回收对象实例所带来的的成本只留给一些小规模任务,在这些任务中,让对象保持无状态并且在应用中反复重用这些对象可能并不合理。在这种情况下,将class声明为单例的bean会被污染,稍后重用的时候会出现意想不到的问题。 -《spring实战》

Spring定义了多种作用域,可以基于这些作用域创建bean,包括:

| 作用域 | 描述 |

| — | — |

| 单例(Singleton) | 在整个应用中,只创建bean的一个实例 |

| 原型(Prototype) | 每次注入或者通过spring应用上下文获取的时候,都会创建一个新的bean实例 |

| 会话(Session) | 在web应用中,为每个会话创建一个bean实例 |

| 请求(Request) | 在web应用中,为每个请求创建一个bean实例 |

1、spring中默认是单例的,我们通过之前的代码演示下

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:p=“http://www.springframework.org/schema/p”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>

测试

package com.kevin.spring.demo3.test;

import com.kevin.spring.demo3.entity.Animal;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

  • 测试类

*/

public class Test {

public static void main(String[] args) {

ApplicationContext ctx = new ClassPathXmlApplicationContext(“animal.xml”);

Animal dog1 = ctx.getBean(“dog”,Animal.class);

Animal dog2 = ctx.getBean(“dog”,Animal.class);

System.out.println(dog1 == dog2);

}

}

输出结果

true

这样验证了从容器中取回的对象默认是单例的。

2、设置成Prototype

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:p=“http://www.springframework.org/schema/p”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>

测试

ApplicationContext ctx = new ClassPathXmlApplicationContext(“animal.xml”);

Animal dog1 = ctx.getBean(“dog”,Animal.class);

Animal dog2 = ctx.getBean(“dog”,Animal.class);

System.out.println(dog1 == dog2);

输出结果

false

延迟初始化bean

ApplicationContext实现的默认行为是在启动时将所有的singleton bean 提前进行实例化。这样配置中或者运行环境的错误就会立刻发现。如果你想延迟初始化。可以在xml中进行配置

测试

public static void main(String[] args) throws InterruptedException {

ApplicationContext ctx = new ClassPathXmlApplicationContext(“student.xml”);

Thread.sleep(3000);

Person kevin = ctx.getBean(“kevin”, Student.class);

System.out.println(kevin);

}

大家自己运行后发现,确实并不是启动后就加载的。

言尽于此,完结

无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。

  • 第一,设计模式能让专业人之间交流方便,如下:

程序员A:这里我用了XXX设计模式

程序员B:那我大致了解你程序的设计思路了

  • 第二,易维护

项目经理:今天客户有这样一个需求…

程序员:明白了,这里我使用了XXX设计模式,所以改起来很快

  • 第三,设计模式是编程经验的总结

程序员A:B,你怎么想到要这样去构建你的代码

程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题

  • 第四,学习设计模式并不是必须的

程序员A:B,你这段代码使用的是XXX设计模式对吗?

程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的

image

从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!

image

搜集费时费力,能看到此处的都是真爱!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
便,如下:

程序员A:这里我用了XXX设计模式

程序员B:那我大致了解你程序的设计思路了

  • 第二,易维护

项目经理:今天客户有这样一个需求…

程序员:明白了,这里我使用了XXX设计模式,所以改起来很快

  • 第三,设计模式是编程经验的总结

程序员A:B,你怎么想到要这样去构建你的代码

程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题

  • 第四,学习设计模式并不是必须的

程序员A:B,你这段代码使用的是XXX设计模式对吗?

程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的

[外链图片转存中…(img-d1FErPiN-1713427732908)]

从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!

[外链图片转存中…(img-LtQe2NHm-1713427732908)]

搜集费时费力,能看到此处的都是真爱!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-1tEu6SVI-1713427732909)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值