SpringFramework|基于XML的依赖注入
环境交代
Java:
1.8
Maven:
3
SpringFramework版本以及各组件成员:
5.1.1.RELEASE
- spring-context
- spring-core
- spring-beans
依赖注入
分别有两种注入形式:
- 构造注入
- 设值注入
基于XML的构造注入
背景
例子中的BeanUser
是个"哑巴", 不具备表达能力. 它希望能借用Bean
的sayHelloWorld
来说两句话, 以表达自己第一次加入程序大家庭的喜悦之情.
代码
具有sayHelloWorld
的bean - Bean.java
❗
这个"Bean"并不符合JavaBean规范, 只是根据Spring中的配置顺口叫的...
具体的JavaBean可以另行搜索.
package noioo;
public class Bean {
public void sayHelloWorld(){
System.out.println("Hello World");
}
}
这是想说话的 - BeanUser.java
package noioo;
public class BeanUser {
private Bean bean;
// need to SayHelloWorld
public BeanUser(Bean bean){
this.bean = bean;
}
// user
public void useBean(){
bean.sayHelloWorld();
}
}
srping容器, 配置依赖注入的元数据 - spring-beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--被使用(被依赖)的Bean-->
<bean id="bean" class="noioo.Bean"/>
<!--bean的使用者-->
<bean id="beanUser" class="noioo.BeanUser">
<!--表明需要构造注入, 并指定ref=所依赖bean的名字-->
<constructor-arg ref="bean"/>
</bean>
</beans>
这是第三方调用方(执行者), BeanUser
总得有个人来调用它的方法.
package noioo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainRunner {
public static void main(String[] args){
// 加载容器
ApplicationContext context = new
ClassPathXmlApplicationContext("spring-beans.xml");
// 利用容器对象(上下文)来获取beanUser对象, 此时会依据beanUser在容器中的配置元数据进行注入.
BeanUser beanUser = (BeanUser)context.getBean("beanUser");
// 调用方法: 表明了beanUser可以使用bean中的方法, 是已经获得了bean对象的了.
beanUser.useBean();
}
}
运行结果
运行MainRunner
, 会出现以下结果:
Hello World
Process finished with exit code 0
基于XML的设值注入
背景
仍是上面的例子.
代码
具有sayHelloWorld
的bean - Bean.java
package noioo;
public class Bean {
public void sayHelloWorld(){
System.out.println("Hello World");
}
}
这是想说话的 - BeanUser.java
package noioo;
public class BeanUser {
private Bean bean;
public Bean getBean() {
return bean;
}
public void setBean(Bean bean) {
this.bean = bean;
}
public void useBean(){
bean.sayHelloWorld();
}
}
配置文件 - spring-beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--被使用(被依赖)的Bean-->
<bean id="bean" class="noioo.Bean"/>
<!--bean的使用者-->
<bean id="beanUser" class="noioo.BeanUser">
<!--表明需要构造注入, 并指定ref=所依赖bean的名字-->
<property name="bean" ref="bean"/>
</bean>
</beans>
执行者
package noioo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainRunner {
public static void main(String[] args){
// 加载容器
ApplicationContext context = new
ClassPathXmlApplicationContext("spring-beans.xml");
// 利用容器对象(上下文)来获取beanUser对象, 此时会依据beanUser在容器中的配置元数据进行注入.
BeanUser beanUser = (BeanUser)context.getBean("beanUser");
// 调用方法: 表明了beanUser可以使用bean中的方法, 是已经获得了bean对象的了.
beanUser.useBean();
}
}
运行结果
Hello World
Process finished with exit code 0