依赖注入DI
把依赖关系通过配置文件+反射来解耦
依赖注入
1、依赖set方法注入(必须有get/set方法)
<bean id="person" class="springDemo2.Person">
<property name="id" value="1111"></property>
<property name="name" value="zs"></property>
<property name="age" value="20"></property>
</bean>
2、依赖构造函数注入(必须有有参构造函数)
格式一:
<bean id="person" class="springDemo2.Person">
<constructor-arg index="0" value="222"></constructor-arg>
<constructor-arg index="1" value="30"></constructor-arg>
<constructor-arg index="2" value="zsw"></constructor-arg>
</bean>
/*index=“0” 指的是有参构造函数(int id, String name)里的第几个属性*/
格式二:
<bean id="person" class="springDemo2.Person">
<constructor-arg name="id" value="1"></constructor-arg>
<constructor-arg name="name" value="2"></constructor-arg>
<constructor-arg name="age" value="3"></constructor-arg>
</bean>
3、若某个类有复杂数据类型(对象要有set/get方法)
<bean id="person" class="springDemo2.Person" >
<property name="id" value="1111"></property>
<property name="name" value="zs"></property>
<property name="age" value="20"></property>
</bean>
<bean id="personDao" class="springDemo2.PersonDao">
<property name="dao" value="888"></property>
<property name="person" ref="person"></property>
</bean>
/*给对象属性赋值时要用ref属性*/
4、自动装配依赖对象
<?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:lang=“http://www.springframework.org/schema/lang"
xsi:schemaLocation=“http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
/*还要在头文件中加入一下两句*/
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xsd" >
5、classpath环境下的自动扫描装配
@Service(业务层)
@Controller(控制器层)
@Repository(dao层数据库)
@Component(泛指如果不想区分层(或者不属于以上三种)就都写上Compoent来代替上面的三个)
<?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:lang="http://www.springframework.org/schema/lang"
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/lang
http://www.springframework.org/schema/lang/spring-lang.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" >
/*对整个包进行扫描匹配*/
<context:component-scan base-package="springDemo6" ></context:component-scan>
</beans>
@Repository(会自动产生id=“productDao”)
public class ProductDao {
public void update(){
System.out.println(“productUpdate”);
}
}
@Service(会自动产生id=“productService”)
public class ProductService {
@Resource(name = “productDao”)
private ProductDao pd;
public ProductDao getPd() {
return pd;
}
public void setPd(ProductDao pd) {
this.pd = pd;
}
public void updateProduct(){
pd.update();
}
/*取值*/
ApplicationContext context=new ClassPathXmlApplicationContext("springDemo6/bean.xml");
ProductService productService=context.getBean(“productService”,ProductService.class);
productService.updateProduct();