Spring依赖注入
Spring注入方式大体可以分为4种
1.构造器注入
2.set注入
3.静态工厂注入
4.实例工厂注入
比较常用的的是前两种,我们就来看一下前两种。
首先来看下构造器注入
第一步、先创建一个javabean
1 public class Person { 2 //姓名 3 private String name; 4 //年龄 5 private String age; 6 //构造方法 7 public Person(String name, String age) { 8 super(); 9 this.name = name; 10 this.age = age; 11 } 12 //一个普通方法 13 public void save(){ 14 System.out.println("save被执行"+"name:"+name+" age:"+age); 15 } 16 }
第二步、然后创建一个Spring容器所需要的配置文件applicationContext.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans 3 xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:p="http://www.springframework.org/schema/p" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 7 <!--id表示这个bean的名称 class这个类的全限定名称,说白了就是加上包的类名--> 8 <bean id="person" class="myspring.Person"> 9 <!--name对应bean里边构造器的参数,value对饮bean中的值--> 10 <!--type类型,基本数据类型可不写type--> 11 <constructor-arg name="name" value="bin" type="java.lang.String"></constructor-arg> 12 <constructor-arg name="age" value="20"></constructor-arg> 13 </bean> 14 </beans>
第三步、然后创建一个测试的类Snippet.java
public class Snippet { public static void main(String[] args) { /** * 构造器注入 * applicationContext.xml存放Spring配置文件的文件 * 如果不在src下,这要写上具体的路径 */ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //返回的是Object对象,要进行类型转换 Person p = (Person)context.getBean("person"); p.save(); } }
运行结果:save被执行name:bin age:20
然后我们再来看set注入
set注入依靠<property></property> 标签进行参数注入
<!--类比于构造器注入 --> <!--不同点在于,set注入需要提供set方法,构造器注入需要构造方法 --> <!--指定属性的标签不一样--> <bean id="person" class="myspring.Person"> <property name="name" value="bin"></property> <property name="age" value="20"></property> </bean>
set注入的javabean需要提供set方法,如下
public class Person { //姓名 private String name; //年龄 private String age;//一个普通方法 public void save(){ System.out.println("save被执行"+"name:"+name+" age:"+age); } //set方法 public void setName(String name) { this.name = name; } //set方法 public void setAge(String age) { this.age = age; } }
测试类同构造器注入的测试类一样,程序执行结果相同
不仅仅是可以注入基本数据类型,还可以进行类类型的注入
<!--ref指向要注入bean的id --> <bean id="snippet" class="myspring.Snippet"> <property name="p" ref="person"></property> </bean> <!--类比于构造器注入 --> <!--不同点在于,set注入需要提供set方法,构造器注入需要构造方法 --> <!--指定属性的标签不一样--> <bean id="person" class="myspring.Person"> <property name="name" value="bin"></property> <property name="age" value="20"></property> </bean>
如上图person类通过set注入的方式注入到snippet类中
public class Snippet { //声明被注入的类 private Person p; //set方法 public void setP(Person p) { this.p = p; } }
如上图在使用Snippet中的P时,容器会自动创建一个Person的实例,省去了我们自己手动new的过程,是不是方便了许多
不仅仅是类可以这样进行创建,set,list等集合也可以使用同样的方法创建,看下面配置文件
<!--ref指向要注入bean的id --> <bean id="snippet" class="myspring.Snippet"> <!-- name要注入数组的名称,value数组里面的值 --> <property name="list"> <list> <value>value1</value> <value>value2</value> <value>value3</value> </list> </property> </bean>
这样子就可以将一个list集合注入到Snippet的实例中了

浙公网安备 33010602011771号