之前一篇文章中示例了spring在容器中实例化对象带参数的处理方法,现在假设需要实例化的一些参数是class类,正常的配置就需要用到ref属性了,使用ref引入其它已经配置好的要注入的bean对象,ApplicationContext.xml的配置示例如下:本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
<bean id="computer" class="cn.kermit.test.Computer" /> <bean id="printer" class="cn.kermit.test.Printer" /> <bean id="people" class="cn.kermit.test.People"> <constructor-arg ref="computer" /> <constructor-arg ref="printer" /> </bean>
其它People类、Printer类和Computer类的代码如下:本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
//People类 package cn.kermit.test; public class People { public Computer computer; public Printer printer; public void setComputer(Computer computer) { this.computer = computer; } public void setPrinter(Printer printer) { this.printer = printer; } public void working() { computer.program(); printer.print(); } public People(Computer computer, Printer printer) { super(); this.computer = computer; this.printer = printer; } } //Computer类 package cn.kermit.test; public class Computer { public void program() { System.out.println("Computer programing"); } } //Printer类 package cn.kermit.test; public class Printer { public void print() { System.out.println("printer: printing"); } }本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
上面的代码即能成功运行出结果,但如果要注入的对象较多,每次配置都需要这样去手写的话一定会是一个很麻烦的事。这时就需要用到Spring中的自动装配了。自动装配需要在ApplicationContext.xml配置中引入context约束,即新增一个xmlns:context项,另外在 xsi:schemaLocation后也增加了2行,同时一定要添加一行注解驱动的支持:<context:annotation-config/>,修改后的配置如下:本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
<?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/> <bean id="computer" class="cn.kermit.test.Computer" /> <bean id="printer" class="cn.kermit.test.Printer" /> <bean id="people" class="cn.kermit.test.People"/> </beans>本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
此时在测试的java程序上即可调用成功。因为添加的上下文context会自动注入实例化时需要的参数类,注意:此时已经用到了context自动注解。测试的JAVA程序如下:本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
package cn.hellomaven; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.kermit.test.People; public class Params { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); People people = (People) context.getBean("people"); people.working(); } }本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
如果上面的两个参数Printer类和Computer类不是构造时的参数,而是一个普通属性呢,情况又不一样了。即Spring容器加载好了三个类的对象,但是People类中的Printer和Computer并不能得到具体class的对象,Spring支持使用注解来自动装配Bean的属性,我们可以选择性的标注某一个属性来对其应用自动装配。Spring支持几种不同的自动装配注解,这里我们主要了解Autowired,因为一般公司里也就只会用到Autowired。本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
@Autowired的使用很简单,只需要在要注入的属性前加入注解即可。如上我们可以把People类修改如下(此时已经不需要set方法了,get方法当然原来也不需要),程序即可成功运行。本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
package cn.kermit.test; import org.springframework.beans.factory.annotation.Autowired; public class People { @Autowired public Computer computer; @Autowired public Printer printer; public void working() { computer.program(); printer.print(); } } //运行结果 Computer programing printer: printing本文地址:http://47.93.183.36/article/873.html,未经许可,不得转载.
本文地址:http://47.93.183.36/article/873.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
手机扫码直接打开本页面 |