首页 > 代码库 > JavaEE--Spring_IOC02

JavaEE--Spring_IOC02

一、Bean实例化的三种方式

  1、使用类的无参构造创建(重点)

      <bean id="user" class="类的全路径"></bean>

      如果类没有无参构造则报异常

    2、使用静态工厂创建

      (1)在工厂类中创建静态方法返回类对象

          public class UserFactory{

            public static User getUser(){

              return new User();

            }

          }

      (2)在Spring配置文件中创建对象

          <bean id="user" class="工厂类的全路径" factory-method="getUser"></bean>

    3、使用实例工厂创建

      (1)创建不是静态的方法返回类对象

          public class UserFactory{

            public  User getUser(){

              return new User();

            }

          }

      (2)

          <bean id="userFactory" class="工厂类的全路径"></bean>

          <bean id="user" factory-bean="userFactory" factory-method="getUser"></bean>

二、bean标签常用的属性

    id属性:起名称,可以任意命名,不能用特殊符号,根据id值可以得到配置对象

     class属性:创建对象所在类的全路径

        name属性:功能和id属性一样,可以使用特殊符号

     scope属性:

        值:singleton:单例的(默认值

          prototype:多例的

          request:Spring创建一个对象把它放在request域中

          session:Spring创建一个对象把它放在session域中

          globalSession:应用在porlet环境中,如果没有porlet环境,那么相当于session

三、属性注入

    第一种:使用set方法注入

        public class User{

          private String name;

          public void setName(String name){

            this.name=name;

          }

        }

     第二种:使用有参构造注入

        public class User{

          private String name;

          User(String name){

            this.name=name;

          }

        }

     第三种:接口注入

        public interface UserDao{

          public void deleteUser();

        }

          public UserDaoImp implements UserDao{

          private String name;

          public void deleteUser(String name){

            this.name=name;

             ...

          }

        }

        在Spring中只支持前两种注入方式

    1、set方法注入配置(重点)

        <bean id="user" class="类的全路径">

          <property name="属性名" value="http://www.mamicode.com/属性值"></property>

        </bean>

    2、使用有参构造注入

        <bean id="user" class="类的全路径">

          <constructor-arg name="属性名" value="http://www.mamicode.com/属性值"></constructor-arg>

        </bean>

    3、注入对象类型的属性(以在service中注入dao为例)

        (1)在service中把dao作为属性

        (2)生成dao类型属性的set方法

        (3)<.bean id="userDao" class="dao的全路径"></bean>

           <bean id="userService" class="service的全路径">

              <property name="属性名" ref="userDao"></property>

           </bean>

    4、p名称空间注入

        在约束上加入:<bean

                 xmlns:p="http://www.springframework.org/schema/p"     

                 >

           <bean id="user" class="类的全路径" p:属性名="属性值"></bean>

    5、复杂属性注入

        注入数组类型:

        <bean id="user" class="类的全路径">

 

          <property name="属性名" >

            <list>

              <value>属性值</value>

              <value>属性值</value>

            </list>

          </property>

        </bean>

         注入list类型

         <bean id="user" class="类的全路径">

           <property name="属性名" >

            <list>

              <value>属性值</value>

              <value>属性值</value>

            </list>

          </property>

          </bean>

         注入map类型

         <bean id="user" class="类的全路径">

           <property name="属性名" >

            <map>

              <entry key="键" value="http://www.mamicode.com/值"></entry>

              <entry key="键" value="http://www.mamicode.com/值"></entry>

            </map>

          </property>

          </bean>

         注入properties类型

         <bean id="user" class="类的全路径">

           <property name="属性名" >

            <props>

              <prop key="键">值</prop>

              <prop key="键">值</prop>

            </props>

          </property>

          </bean>

四、IOC和DI的区别

      (1)ioc:控制反转,把对象交给spring配置

          (2)di:依赖注入:向类里面的属性设置值

        (3)关系:依赖注入不能单独存在,需要在ioc的基础上完成操作

JavaEE--Spring_IOC02