Spring-(六)自动装配

本文最后更新于:January 28, 2022 pm

Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。

目录

XML的自动装配

1
2
3
4
5
6
7
8
9
10
11
12
<bean id="tone" class="com.tothefor.One"/>
<bean id="ttwo" class="com.tothefor.Two"/>

<bean id="test" class="com.tothefor.Student" autowire="byName">
<property name="name" value="loong"/>
<!-- 这里就不再写上面那两个引用类型,会通过byName自动装配,前提是Student属性中有这两个类的对象 -->
</bean>

<!--
byName:会自动在容器上下文中查找和自己对象setXxxx方法后面的值Xxxx对应的bean得到id
byType:会自动在容器上下文中查找和自己对象属性类型相同的bean
-->

注解的自动装配

需要在配置文件头部加入一个约束:

1
2
3
4
5
xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation中添加:
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"

Spring官方网站1.9 依照官方方法的完整代码:

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
https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解支持 -->
<context:annotation-config/>

</beans>

aop也是这样进行添加。

使用Autowired实现自动装配。

示例:

现有一个Dog类、Cat类。一个Person类,其属性中包含Dog对象和Cat对象。

配置文件:

1
2
3
4
5
<context:annotation-config/>

<bean id="cat" class="com.tothefor.autoWire.Cat"/>
<bean id="dog" class="com.tothefor.autoWire.Dog"/>
<bean id="person" class="com.tothefor.autoWire.Person"/>

Person.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.tothefor.autoWire;

import org.springframework.beans.factory.annotation.Autowired;

/**
* @Author DragonOne
* @Date 2022/1/28 23:10
* @墨水记忆 www.tothefor.com
*/
public class Person {

@Autowired
private Dog dog;
@Autowired
private Cat cat;

public Dog getDog() {
return dog;
}

public void setDog(Dog dog) {
this.dog = dog;
}

public Cat getCat() {
return cat;
}

public void setCat(Cat cat) {
this.cat = cat;
}
}

测试类:

1
2
3
4
5
6
public void test01(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Person person = (Person) context.getBean("person",Person.class);
person.getCat().show();
person.getDog().show();
}

但这样运行后,会出现空指针异常。这里两个解决办法,就当是拓展了

  1. 使用@Nullable:字段标记注解,说明这个字段可以为null。
  1. Autowired可以跟一个属性required。这个属性默认为true,表示这个对象不能为null;设为false,则表示可以为null。