Spring-1-day--对象的注册

一、Spring对象注册的简单配置

1.Spring对象注册必须的jar包。

对象注册必须的四个包:beans,context,core和expression四个包,另外还有两个日志包,Apache的logging包和log4j包。

2.书写一个对象。

package cn.guanyq;

public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

 

3.导入约束。

       导入beans的约束。

4.对对象的注册完成配置。

   将上面创建的对象交给Spring管理。

   

<bean name="user" class="需要被管理对象的完整类名"></bean>

  字这用到<bean></bean>,内部的name属性可以随便起一个名字,用作从Spring中取出时用,class则为需要放入的对象的完整类名。

     

二、Spring概念

    • ioc

   ioc就是inverse of control,反转控制,也就是将我们对象创建的方式反转了,使用Spring之后对象的创建以及依赖的注入,都完全交给Spring来完成。

    • di

 dependency injection 依赖注入,实现ioc思想就需要依赖注入技术的支持。依赖注入根据方式又分为:set方法注入,构造方法注入,以及字段注入。根据注入类型又分为:基本类型注入,引用类型的注入(注入对象),形成依赖关系。

    • applicationContext和beanFactory

     beanFactory是一个接口,Spring的最原始接口,实现类的功能比较单一,实现这个接口的容器,只有在每次获得对象的时候才会获得对象。

applicationContext接口,每次容器启动时就会创建对象,并具有更多的功能。实现类ClassPathXmlApplicationContext(src路径),会从src路径下加载配置文件。

实现类FileSystemXmlApplicationContext(磁盘绝对路径)加载配置文件。

三、Spring配置的详解。

1.配置详解

       <bean name="user" class="需要被管理对象的完整类名" scope="singleton"></bean>

        <bean>使用这个元素来描叙需要Spring来管理的对象。而name属性,则是指定取出对象时使用的名字,可以重复(但不建议重复),也可以是特殊字符,已经取代id属性,而class属性则是需要被管理的对象的完整类名。scope属性则是指定这个对象在Sping容器中是否会被创建多次,其默认值为singleton,也就是单例对象,在整个Spring容器中只会被创建一次,每次取出都取出的为同一个对象,如果每次取出都希望取出不同的对象,则可以将scope设置为prototype,即为多例对象。在Spring和strut2整合时就需要将Action对象指定为多例对象。因为每次的请求都会创建一个不同的Action。scope还有另外两个取值,分别为request和response,在web环境下分别和request和response的生命周期相同。

2.Spring是如何创建对象的。

                      上面的配置方式即为Spring利用对象的空参构造器创造对象,另外还有两种,则分别为:静态工厂和实例工厂,配置则有些麻烦。

3.分模块来配置,引入其他配置文件。

           <import resource="其他配置文件的src下路径"></import>

4.容器的配置

                  在web环境下容器需要跟随项目的启动而创建,不能每次获得对象时都创建一个容器,因此可以将容器的创建放在ContextServlet域创建的监听器内。跟随项目的启动而创建,项目的 关闭而销毁。

<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
</context-param>

           5.从Action中获得容器

   

//获得ServletContext域
ServletContext sc= servletAcationContext.getServletContext();
//获得容器
WebApplicationContext ac=  webApplicationContextUtils.getWebApplicationContext(sc);
//从容器中获得对象。
 User user=(User) ac.getBean("user");

 

四、属性注入

  1. 注入方式

1.1set方法注入

<bean name="user" class="user的完整类名"scope="singleton">
   <property name="name"value="tom"></property>
   <property name="age"value="18"></property>
</bean>

               上面例子为简单的值类型注入,如果要注入一个引用类型,则需要:

1 <bean name="user" class="user类路径"scope=“singleton“> 2 <property name="name" value="tom"></property> 3 <property name="name" value="tom"></property> 4 <property name="car" ref="car"></property> 5 </bean> 6 7 <bean name="car" class="car完整类名" scope=“singleton”> 8 <property name="name" value="大众"></property> 9 <property name="color" value="black"></property> 10 </bean>

如果需要注入对象,则需要先将要注入的对象进行注册,再注入。第4行的ref的car就是第7行name的car。

 

1.2构造函数注入

 

<bean name="user" class="user的完整类名">
    <constructor-arg name="name" index="0"  type="java.lang.String" value="tom"></constructor-arg> 
     <constructor-arg name="age" index="1"  type="java.lang.Integer" value="18"></constructor-arg> 
</bean>

                其中name属性为构造函数的参数名,index为构造函数的参数所在位置的索引,type为构造函数参数的类型。

1.3 p名称空间注入

p名称空间的注入需要导入一个p名称空间。

<bean name="user"  class="" p:name="tom" p:age="18" p:car-ref="car" ></bean>

<bean name="car" class="" p:name="大众" p:color="black" ></bean>

其中p:属性名=“值”,来进行值得注入。用p:属性名-ref=“bean名称”来进行引用对象的注入

1.4 spel注入

spring特有的表达式语言

2. 复杂类型的注入

2.1 数组的注入

          如果数组中只有一个元素直接用value或者ref注入即可。如果有多个元素则:

<property name="arr">
   <array>
     <value>1</value>      
     <value>2</value>
     <ref bean="car">
   </array>
</property>

 数组中的注入利用property,其中name为数组在类中的名字。value来注入基本值,利用ref来注入引用类型。

2.2 map的注入

<property name="map">
    <map>
      <entry key="" value=""></entry>
      <entry key="" value-ref=""></entry>
   </map>
</property>

          <entry>表示是map,其中的key和value分别对应map 的键值对。如果value为引用类型,则使用value-ref来指定。

2.3 list的注入

    list的注入基本和array的注入方式相似

<property name="list">
     <list>
       <value>1</value>
       <ref bean="car"/>
     </list>
</property>

用value来注入基本的数据类型,而引用类型则用ref中的bean来指定。

2.4 properties的注入

<property name="prop">
   <props>
      <prop  key="name">tom</prop>
   </props>
</property>

 

 

 

 

 

    

posted @ 2018-06-26 01:18  流浪的小蛤蟆  阅读(163)  评论(0)    收藏  举报