简短的学习笔记,自我回顾。
一. 搭建spring环境
我的idea是2023.2.3最终版。
首先创建maven工程,在pom文件中获取spring依赖的jar包。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.23</version> </dependency>
版本随意,能用就行。
随后,在resources工程核心配置文件夹中创建spring核心配置文件。
鼠标光标移至文件夹上,alt+insert后:
创建好以后,环境配置完成。
二. 理解Spring框架的三大核心服务
1. 控制反转服务:Inversion of control (IOC)
意为:由spring容器对象负责创建创建指定类型的实例对象
方式:Xml文件方式;注解方式
Xml文件方式实现IOC:
简单来说,就是在spring核心配置文件中书写bean标签实现创建实例对象
当spring容器对象在创建完毕后,自动读取指定的Spring配置文件然后将所有通过bean标签推荐的类进行实例对象的创建,并将创建好的对象以KeyValue形式存储在Spring容器对象内部
书写:创建一个Students类,无参构造器。然后到Spring核心配置文件中书写。
注意:默认情况下调用Spring对象的无参构造方法完成实例对象的创建,如果有参构造器的话就要用下一节讲到的依赖注入实现属性的赋值或者初始化
如何验证我的这个对象已经创建好了呢?测试一下
打开test包下的AppTest测试类(Maven自动帮你创建的那个),在测试方法中书写:
ApplicationContext spring = new ClassPathXmlAoolicationContext("核心配置文件名");
Student st = (Student)spring.getBean("bean标签的id");
以上两行代码实现接收,是必要的。接下来查看结果:
找到了,OK创建成功。
注解方式实现IOC:
还是那个Student类,在签名上方书写注解
@Component(”stu1“)
如图:
然后(还没完):你需要到spring核心配置文件中添加一个组件扫描器以实现创建
<context:component-scan base-package="com.bjpowernode">,用于为指定包下所有带有component注解的类创建实例对象。
2. 依赖注入服务:Dependency Injection(DL)
意为:由spring容器对象负责完成指定对象中指定属性的初始化任务
方式:Xml文件方式;注解方式
Xml文件方式实现DL:
修改原有的Student类,新增属性;新增School类,添加属性
原有的属性赋值有两种:有参构造方法或者setter方法
因此,通过Xml文件方式实现的赋值也可以通过这两种方式实现。
首先使用setter方法创建一个学校,再用有参构造方法创建第二个学校
创建一个学生,将任意一个学校赋给这个学生。
总结:
DL的Xml赋值有两种:setter或者有参构造方法
setter:
<bean id="自定义" class="位置">
<property name ="指定的属性名" value="值"/>
<property name ="指定的属性名" value="值" />
</bean>
有参构造器:
<bean id="自定义" class="位置">
<constructure-arg index="0" value="值"/>
……
</bean>
别忘了ref用来指定对象属性
注解方式实现DL:(别忘了扫描器)
首先,新建文件,复制原有的school和students类到新的spring工程中。
现在,任务一:使用注解形式创建一个学校类型对象
如图所示:对象名为 “SchoolMy”;id为001,schoolName为“北京大学”
@Component("SchoolMy")
@Value("001")
@Value("北京大学")
任务二:创建一个学生类型对象,将前一个我们创建的学校对象赋给学生中的引用类型对象
如图所示。接下来讲讲autowired和qualifier这两个注解。
首先是autowired:
自动注入注解:我们学生的学校属性名称为 stSchool,在添加这个注解以后
spring容器对象会自动寻找key为stSchool的School对象并赋值;如果没有名称为stSchool的School对象,则会寻找一个类型为School或者为School子类的对象并赋值。
如图,此时学生2237的学校就会是北京大学,它符合了第二个赋值要求(即id和属性名不一致);
如果此时我又新建了一个学校,id与学生属性名一致呢?
在spring.xml文件中新建一个学校对象。
这是id与学生中学校属性名一致的情况.
<bean id="stSchool" class="org.entity.School"> <property name="id" value="002"/> <property name="schoolName" value="清华大学"/> </bean>
@Component("SchoolMy") public class School { @Value("001") private int id ; @Value("北京大学") private String schoolName ;
@Component("stu") public class Student { @Value("2237") private int stId; @Value("Mike") private String name; /* 自动注入注解:这个注解将会向spring中寻找key为当前属性名(stSchool)的School类型对象并将其赋值 如果没有,则会寻找与之相对应School对象并赋值 */ @Autowired private School stSchool;
现在这个学生对象的学校是清华大学还是北京大学呢?测试一下。
如果说我就想让学生的大学为北京大学,但我又不想改已经写好的bean标签和注解呢?
使用@Qualifier注解,书写字段名,实现指定对象的赋值。
@Autowired @Qualifier("SchoolMy") private School stSchool; 测试一下
测试成功!
3. 面向切面编程服务
意为:由spring容器对象负责降低开发人员进行代理设计模式的开发负担。
回头再搞。