SSH学习九 依赖注入及加载Spring配置文件的方法

依赖注入(DI)和控制反转(IoC),意思是一样的

传统方式中,如果JAVA实例A需要另一个实例B,那么需要new B(),然后给A用,也就是有调用者A创建被调用者B的实例

依赖注入模式下:创建被调用者B的工作不再由A完成,而是由Spring容器完成(或者说工厂模式的工厂完成),然后注入调用者,因此也成为依赖注入,因为A和B是依赖关系。

依赖注入有两种方式:

(1)设值注入

Spring通过Set方法为类A的成员注入值。

(2)构造注入

通过构造器注入。

例子如下:

代码逻辑:

Service通过构造器注入dog和cat,也就是构造注入,而dog和cat的属性-年龄是通过set方法注入,也就是设值注入,实现的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns=""xmlns:xsi=""xmlns:p=""xsi:schemaLocation=" "><!– <bean id="dog" class="com.ehr.service.Service"></bean>Dog dog =new Dog(); –> <bean id = "dog" class="com.learn.DAO.impl.Dog"> <property name="dage" value="12"></property> </bean> <bean id="cat" class="com.learn.DAO.impl.Cat"> <property name="cage" value="21"></property> </bean> <bean id = "service" class="com.ehr.service.Service"> <constructor-arg ref="dog"></constructor-arg> <constructor-arg ref="cat"></constructor-arg> </bean></beans>Service:

package com.ehr.service;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.DAO.ICat;import com.learn.DAO.IDog;import com.learn.DAO.impl.Cat;import com.learn.DAO.impl.Dog;public class Service {IDog dog;ICat cat;public Service(IDog dog, ICat cat){this.dog = dog;this.cat = cat;}public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Service s1 = (Service) context.getBean("service");s1.dog.bark();s1.cat.bark();}}

IDogpackage com.learn.DAO;public interface IDog {public void bark();}Catpackage com.learn.DAO.impl;import com.learn.DAO.ICat;public class Cat implements ICat {int cage;public void setCage(int cage) {this.cage = cage;}@Overridepublic void bark() {System.out.println("Cat.bark()" + cage);}}ICatpackage com.learn.DAO;public interface ICat {public void bark();}加载配置文件的方法:

转载这里:

一:Spring中的几种容器都支持使用xml装配bean,包括: XmlBeanFactory , ClassPathXmlApplicationContext , FileSystemXmlApplicationContext , XmlWebApplicationContext加载这些容器的配置文件的xml有一下几种常见的方法:1:引用资源用XmlBeanFactory(不能实现多个文件相互引用)

Java代码

Resourceresource=newClassPathResource("appcontext.xml");BeanFactoryfactory=newXmlBeanFactory(resource);

从factory中获取相应资源文件中的bean,但是这种bean读不到引用了其他文件中的bean!2:引用应用上下文用ClassPathXmlApplicationContext

Java代码

ApplicationContextfactory=newClassPathXmlApplicationContext("classpath:applicationContext.xml");ApplicationContextfactory=newClassPathXmlApplicationContext("conf/userConfig.xml");//src/conf目录下的ApplicationContextfactory=newClassPathXmlApplicationContext("file:G:/Test/src/appcontext.xml");

3:用文件系统的路径引用应用上下文用FileSystemXmlApplicationContext

Java代码

ApplicationContextfactory=newFileSystemXmlApplicationContext("src/applicationContext.xml");ApplicationContextfactory=newFileSystemXmlApplicationContext("classpath:appcontext.xml");ApplicationContextfactory=newFileSystemXmlApplicationContext("file:G:/Test/src/appcontext.xml");ApplicationContextfactory=newFileSystemXmlApplicationContext("G:/Test/src/appcontext.xml");

注意:在2、3的加载方式中可以加载多个配置文件,获取到ApplicationContext 对象中

你的脸是为了呈现上帝赐给人类最贵重的礼物–微笑,

SSH学习九 依赖注入及加载Spring配置文件的方法

相关文章:

你感兴趣的文章:

标签云: