Spring 依赖注入的方法(基于xml配置),
分享于 点击 10559 次 点评:150
Spring 依赖注入的方法(基于xml配置),
Spring 依赖注入的方法(基于xml配置)
前言
Spring依赖注入的方法有三种:
Spring依赖注入原理:是利用Java的反射机制
注: Spring可以注入类实现所需要的外部资源,实例主要注入的是属性,所有的实例都可以在idea上运行测试,文章末尾附了一些maven工程结构和配置
属性注入(set注入)
属性注入条件:类中有默认的构造方法(即无参构造方法),有属性对应的setter方法。
实例:(在Animal类中生成setter方法)
public class Animal {
private String name;
private String food;
public void printAnlimal(){
System.out.println(name + "吃" + food);
}
/*java类中如果没有构造方法会自动生成默认的无参构造方法, 如果有带参数
的构造方法,Java类就不会自动生成默认构造方法,就需要手动创建无参构造方法*/
public void setName(String name) {
this.name = name;
}
public void setFood(String food) {
this.food = food;
}
}
xml中的bean的配置
<!--bean的id不可以相同,否则在后定义的bean会覆盖之前的bean-->
<bean id="cat" class="com.ddpapa.springIoC.Animal">
<property name="name"><value>猫</value></property>
<property name="food"><value>老鼠</value></property>
</bean>
构造函数注入
通过类的有参构造方法注入属性值。
实例
package com.ddpapa.springIoC;
public class Animal {
private String name;
private String food;
private String animalType;
public void printAnlimal(){
System.out.println(name + "吃" + food);
}
public Animal(String name, String food) {
//有参构造方法
this.name = name;
this.food = food;
}
}
xml中的配置
<!--1.参数类型匹配-->
<bean id="cat" class="com.ddpapa.springIoC.Animal">
<constructor-arg type="java.lang.String">
<value>猫</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>老鼠</value>
</constructor-arg>
</bean>
<!--2.索引匹配-->
<bean id="cat" class="com.ddpapa.springIoC.Animal">
<constructor-arg index="0">
<value>猫</value>
</constructor-arg>
<constructor-arg index="1">
<value>老鼠</value>
</constructor-arg>
</bean>
<!--3.类型索引联合匹配-->
<bean id="cat" class="com.ddpapa.springIoC.Animal">
<constructor-arg index="0" type="java.lang.String">
<value>猫</value>
</constructor-arg>
<constructor-arg index="1" type="java.lang.String">
<value>老鼠</value>
</constructor-arg>
</bean>
工厂方法注入
- 非静态方法
Animal的工厂类
package com.ddpapa.springIoC;
public class AnimalFactory {
public Animal creatAnimal(){
//利用构造方法注入animal 的属性
Animal cat = new Animal("猫","老鼠");
return cat;
}
}
xml中配置
<!--animal的工厂方法不是静态的,要先实例化工厂才能使用工厂方法;
在xml中需要先配置animalFactory的bean,再指定工厂方法-->
<bean id="animalFactory" class="com.ddpapa.springIoC.AnimalFactory"/>
<bean id="cat" factory-bean="animalFactory" factory-method="creatAnimal"/>
- 静态方法
animal的静态工厂方法
package com.ddpapa.springIoC;
public class AnimalFactory {
public static Animal creatAnimal(){
//利用构造方法注入animal 的属性
Animal cat = new Animal("猫","老鼠");
return cat;
}
}
xml中的配置
<!--无需配置工厂bean指定工厂类和工厂方法-->
<bean id="cat" class="com.ddpapa.springIoC.AnimalFactory" factory-method="creatAnimal"/>
附件
- maven工程结构
- pom.xml配置spring所需要的依赖文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ddpapa</groupId>
<artifactId>springIoC</artifactId>
<version>1.0</version>
<name>SpringIoCAndDI</name>
<dependencies>
<!-- spring 依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<file.encoding>UTF-8</file.encoding>
<spring.version>4.2.2.RELEASE</spring.version>
</properties>
</project>
- Animal类:
package com.ddpapa.springIoC;
public class Animal {
private String name;
private String food;
public void printAnlimal(){
System.out.println(name + "吃" + food);
}
}
- 测试类:
package com.ddpapa.springIoC;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class IoCtest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("springIoC.xml");
Animal cat = ctx.getBean("cat",Animal.class);
cat.printAnlimal();
}
}
- Spring的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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
</beans>
相关文章
- 暂无相关文章
用户点评