SSM复习笔记:Spring5,Java的春天

027_001.jpg

简单来说,spring像是一个粘合剂,可以实现动态代理为基础的面向切面编程(AOP),以及控制反转(IOC)。

所谓的面向切面编程,就像它的名字一样,在不破坏耦合性的情况,实现了往代码里面插代码。

作为overview,同样来一个例子展示spring IOC的使用:

先导入jar包,利用maven可以导入jar包的依赖,以及依赖的依赖…

第一步,写出一个实体类:

1
2
3
4
5
6
7
8
9
10
11
12
public class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("Hello,"+ name );
}
}

第二步,配置spring的配置文件

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean就是java对象 , 由Spring创建和管理-->
<bean id="hello" class="com.wang.pojo.Hello">
<property name="name" value="Spring"/>
</bean>
</beans>

第三步,也是最后一步—测试

1
2
3
4
5
6
7
8
9
@Test
public void test(){
//解析beans.xml文件 , 生成管理相应的Bean对象
ApplicationContext context = new
ClassPathXmlApplicationContext("beans.xml");
//getBean : 参数即为spring配置文件中bean的id .
Hello hello = (Hello) context.getBean("hello");
hello.show();
}

简单三步,却道出了spring的核心api—-ApplicationContext

对象的创建由之前的new,变成了被动的接收对象,这个过程就是控制反转。

也就是IOC思想:从主动的编程转变为被动的接收。这就是spring框架的灵魂,之后我们就可以把mybatis的东西全交给spring托管,需要用的时候直接接收对象即可!

以下一一来介绍各个步骤:

第三步,测试

我们从后往前介绍,先来看spring的核心api,ApplicationContext,它有两个实现类

这里主要介绍其中一个不基于web的,ClassPathXmlApplicationContext,先读取spring的配置文件,就可以得到context对象,此时context对象就可以把他看作一个中介,只需要调用它的方法就可以得到我们想要的对象。

第二步,spring的配置文件

这里是spring的大头

可以把这个xml文件看作是中介登记手册,想要进行代理的类都要在这里注册,并设置对应的属性值,下面简单描绘一下它的结构。

-—sping xml的头标签(一堆url)

context标签,用于读取配置文件

一堆bean标签,代表每个来登记的类

import标签,用于引入其他spring xml,常用于团队协作

-—-sping结束标签

下面一一介绍:

头文件常常长成这样,可以理解为,xml的依赖,一般都是复制粘贴所得。

1
2
3
4
5
6
7
8
9
10
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

</beans>

context标签用于导入配置文件,如:

1
<context:property-placeholder location="classpath:db.properties"/>

值得介绍的就是这个bean标签,是spring的核心,它就是用于控制注入的核心标签。

值得注意的是,bean标签注入的类一定是要有set get方法以及空参构造器。

不同类型的属性,注入的标签有些许的不同。

具体可以参考这个文章

Damon:Spring常用的注入方式

值得注意的是,c命名空间注入,c就是构造器的意思,适用于一些本身没有空参构造器的情况。

1
2
3
导入约束 : xmlns:c="http://www.springframework.org/schema/c"
<!--C(构造: Constructor)命名空间 , 属性依然要设置set方法-->
<bean id="user" class="com.wang.pojo.User" c:name="wang" c:age="18"/>

然后是import标签

1
<import resource="{1 path}/beans.xml"/>

然后是第一步,就是实体类

这一步本身没什么可说的,但是,我们可以在这一步中使用注解来提高开发效率。

准备工作:

1、spring配置文件引入头

1
2
3
4
5
6
7
8
9
10
11
12
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">



</beans>

2、在context标签中开启注解支持

1
<context:1 annotation-config/>

在引用的属性上面直接加@Autowired 注解即可

@Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配·

还有一个更加智能的标签

@Resource如有指定的name属性,先按该属性进行byName方式查找装配;

其次再进行默认的byName方式进行装配;

既然属性可以自动装配,类本身为什么不行呢?

先要context标签设置要扫描的包

1
2
<!--指定注解扫描包-->
<context:component-scan base-package="com.wang.pojo"/>

在指定包下编写类,就可以添加注解了

1
2
3
4
5
@Component("user")
// 相当于配置文件中 <bean id="user" class="当前注解的类"/>
public class User {
public String name = "wang";
}

同样的,在注入属性为常量时,也可以使用注解

1
2
3
4
5
6
7
@Component("user")
// 相当于配置文件中 <bean id="user·" class="当前注解的类"/>
public class User {
@Value("wang")
// 相当于配置文件中 <property name="name" value="wang"/>
public String name;
}

027_002.jpg


SSM复习笔记:Spring5,Java的春天
https://yiyuwang.be/2021/03/27/2021-03-27-360344551/
作者
StevenWong
发布于
2021年3月27日
许可协议