Spring 控制反转 依赖注入
SpringFramework
IOC(Inversion of Control) 控制反转
将程序对象创建的控制权转移到外部,使用对象时,由主动new对象转换为外部提供对象。
spring提供了一个Ioc容器,负责对象的创建、初始化等一些列工作,被Ioc容器创建和管理的对象统称为Bean.
DI(Dependency Injection) 依赖注入
在Ioc容器中建立bean与bean 之间依赖关系的过程,称为依赖注入(DI)。
目的:
解耦,使用对象时不仅可以直接从容器中获取,并且取到的bean已经绑定了所有依赖关系。
applicationContext.xml内配置bean
Ioc实现
1、配置bean
<?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 id="userdao" class="com.ck.dao.UserDaoImp" scope="prototype" init-method="init" destroy-method="destory"/>
</beans>
2、创建bean
// 获取Ioc容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取bean 返回对应对象
UserDao userdao=ctx.getBean("userdao");
DI实现
1、配置bean的属性
<?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 id="userdao" class="com.ck.dao.UserDaoImp" scope="prototype" init-method="init" destroy-method="destory"/>
<bean id="userService" class="com.ck.dao.UserServiceImp" scope="prototype" >
//<!--property 标签表示配置当前bean属性--> //删除new创建对象,通过DI代替new创建实例
<property name="userDao" ref="userDao">
</bean>
</beans>
bookDao.java
package com.upc.dao.impl;
public interface bookDao {
public void save();
}
bookService.java
package com.upc.dao.impl;
import java.lang.reflect.Array;
import java.util.*;
public class bookDaoImpl implements bookDao {
private int[] array;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
private Properties properties;
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public int[] getArray() {
return array;
}
public void setArray(int[] array) {
this.array = array;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public void save() {
System.out.println("save ...");
System.out.println("数组"+Arrays.toString(array));
System.out.println(list);
System.out.println(set);
System.out.println(map);
System.out.println(properties);
}
}
applicationContext.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 id="bookDao" class="com.upc.dao.impl.bookDaoImpl">
<property name="array">
<array>
<value>100</value>
<value>200</value>
<value>300</value>
<!-- 引用类型 <ref bean="beanId"/>-->
</array>
</property>
<property name="list">
<list>
<value>"111"</value>
<value>"222"</value>
<value>"333"</value>
</list>
</property>
<property name="set">
<set>
<value>100</value>
<value>100</value>
<value>300</value>
</set></property>
<property name="map">
<map>
<entry key="price" value="200"/>
</map>
</property>
<property name="properties">
<props>
<prop key="price">200</prop>
</props>
</property>
</bean>
</beans>
main.java
import com.upc.dao.impl.bookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class main {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
bookDao bookdao= (bookDao) ctx.getBean("bookDao");
bookdao.save();
}
}