依赖注入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();