Spring深入研究(一)

来源:互联网 发布:哪里胡杨林最美 知乎 编辑:程序博客网 时间:2024/05/04 19:08

Spring

创建Spring配置文件

  • Spring配置文件 名字位置不固定

    放在src目录下面,命名applicationContext.xml

  • schema约束

<?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="foo" class="x.y.Foo">        <meta key="cacheName" value="foo"/>        <property name="name" value="Rick"/>    </bean></beans>
  • bean实例化方式

第一种 使用类的无参数构造创建

第二种 使用静态工厂创建

第三种使用实例工厂创建

  • bean 标签常用属性
  • id 属性:

​ 起的名称,任意命名,根据id得到配置对象

  • class属性:

    要创建的bean的全路径

  • name属性:

    与id属性作用相同(遗留问题)

  • scope属性: Bean的作用范围:

    singleton:默认值,单例的

    prototype:多例的

    request:对象存入到request域中

    session:对象存入到Session域中

    globalSession:如果没有Porlet环境那么globalSession相当于session

属性注入

创建对象时候,向类里面属性里面设置值

属性注入三种方式:

  • 使用set方法注入
 <!--使用set方法注入属性--><bean id="book" class="com.jia.property.Book"><!--注入属性值  name属性值:类里面定义的属性名称  value属性:设置具体的值-->  <property name="bookname" value="易筋经"></property></bean>
  • 有参数构造器注入
<!--使用有参数构造注入属性--><bean id="demo1" class="com.jia.property.PropertyDemo1"><!--使用有参构造注入-->  <constructor-arg name="username" value="小王小马"></constructor-arg></bean>
  • 使用接口注入

注入对象类型属性

<!--1配置service和dao对象--><bean id="userDao" class="com.jia.ioc.UserDao"></bean><bean id="userService" class="com.jia.ioc.UserService">    <!--注入dao对象        name属性值:service类里面属性名称            不要使用value属性,因为字符串使用value,对象使用ref        ref属性:dao配置bean标签中id值    -->  <property name="userDao" ref="userDao"></property></bean>

P名称空间注入

xmlns:p="http://www.springframework.org/schema/p"
<!--p名称空间注入--><bean id="person" class="com.jia.property.Person" p:pname="lucy"></bean>

注入复杂类型属性

  • 1 数组
  • 2 list集合
  • 3 map 集合
  • 4 properties 类型
<!--注入复杂类型属性值 -->  <bean id="person" class="com.jia.property.Person">      <!--数组 -->      <property name="arrs">          <list>              <value>小王</value>              <value>小马</value>              <value>小宋</value>          </list>      </property>      <!-- list -->      <property name="list">          <list>              <value>小奥</value>              <value>小金</value>              <value>小普</value>          </list>      </property>      <!-- map -->      <property name="map">          <map>              <entry key="aa" value="lucy"></entry>              <entry key="bb" value="mary"></entry>              <entry key="cc" value="tom"></entry>          </map>      </property>      <!-- properties -->      <property name="properties">          <props>              <prop key="driverclass">com.mysql.jdbc.Driver</prop>              <prop key="username">root</prop>              <prop key="password">root</prop>          </props>      </property>  </bean>

IOC和DI区别

  • IOC: 控制反转,把对象创建交给spring进行配置
  • DI: 依赖注入,向类里面的属性中设置值
  • 关系: 依赖注入不能单独存在,需要在ioc基础之上完成操作

Spring整合web项目原理

  • 1 加载Spring核心配置文件
//加载spring配置文件,根据创建对象      ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

new 对象,功能可以实现,效率很低

  • 2 实现思想:把配置文件和创建对象过程,在服务器启动时候完成
  • 3 实现原理

(1)ServletContext对象

(2)监听器

(3)具体使用:

    • 在服务器启动时候,为每个项目创建一个ServletContext对象
    • 在ServletContext对象创建时候,使用监听器可以具体到ServletCintext对象在什么时候创建
    • 使用监听器监听到ServletContext对象创建时候,加载Spring配置文件,把配置文件配置对象创建
    • 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
    • 获取对象时候,到ServletContext域得到(getAttribute方法)
1 0
原创粉丝点击