.Net转Java自学之路—Spring框架篇一(IOC入门)

Spring概述:

  spring是一个一站式轻量级的开源框架。spring核心主要有两部分:AOP(面向切面)、IOC(控制反转)。

  aop:卖你想切面编程。扩展功能不修改源代码实现。

  ioc:控制反转。当类中有非静态方法,调用该方法时需要创建类的对象。而spring把对象的创建不是通过new的方式实现,而是交给spring配置创建类的对象。

Spring一站式框架:

  spring在JavaEE三层结构中,每一层都提供不同的解决技术。

  web层:SpringMVC
  service层:spring的ioc
  dao层:spring的jdbcTemplate

IOC:

  把对象的创建交给Spring进行管理。ioc操作分为俩部分:ioc的配置文件方式、ioc的注释方式。

  ioc底层原理使用技术:1、xml配置文件。2、工厂设计模式。3、dom4j解决xml。4、反射。

IOC入门案例:

  1、导入jar包。Java的特点都具有三个jar包:
      spring-beans-RELEASE.jar
      spring-beans-RELEASE-javadoc.jar
      spring-beans-RELEASE-sources.jar。
    在做spring最基本的功能时,导入四个核心jar包即可:
      spring-beans-RELEASE.jar
      spring-context-RELEASE.jar
      spring-core-RELEASE.jar
      spring-expression-RELEASE.jar
    支持日志输出的jar包:
      commons-logging.jar
      log4j.jar

  2、创建类、方法。

public class Test{
    public void method(){
        //code...
    }
}

  3、创建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">

</beans>

    》配置对象创建。

<?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="test" class="Test类全路径"></bean>

</beans>

  4、加载Spring配置文件。

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

  5、得到配置创建的对象。

Test test=(Test)context.getBean("test");
test.method();

Spring的bean管理(xml配置文件):

  bean实例化方式:在spring中通过配置文件创建对象。

  实例化的三种方式:

    1、使用类的无参构造函数创建:若类中没有无参构造函数,会报异常。
    2、使用静态工厂创建:在工厂类中创建静态方法,返回类对象。

<bean id="test" class="Test类全路径" factory-method="method"></bean>

    3、使用实例工厂创建:创建非静态方法,返回类对象。需要先配置创建工厂类对象。

<bean id="testFactory" class="TestFactory类全路径"></bean>
<bean id="test" factory-bean="testFactory" factory-method="method"></bean>

  bean标签常用属性:

    id:id属性值名称任意命名(非中文及特殊符号)。根据id值得到配置的对象。
    class:创建对象所在类的全路径。
    name:功能和id属性一致。但name属性值可包含特殊符号。
    scope:bean的作用范围。属性值都有:
      singleton:默认值,单例的。
      prototype:多例的。
      request:web项目中,Spring创建一个Bean对象,将对象存入request域中。
      session:web项目中,Spring创建一个Bean对象,将对象存入session域中。
      globalSession:web项目中,应用在Porlet环境,若没有Porlet环境,那么globalSession就相当于session 。

  属性注入:

    创建对象时,向类中的属性设置值。

    属性注入的三种方式:

      1、使用set方法注入:

<bean id="test" class="Test类全路径">
    <property name="类中属性名称" value="属性值">
</bean>

 

<!-- 注入对象类型属性 -->
<bean id="testDao" class="TestDao类全路径"></bean>
<bean id="testService" class="TestService类全路径">
    <property name="属性名称(对象名称)" ref="testDao(要注入的对象)">
</bean>

      2、有参构造函数注入:

<bean id="test" class="Test类全路径">
    <constructor-arg name="属性名称" value="属性值"></constructor-arg>
</bean>

      3、使用接口注入:在Spring框架中,不支持接口注入。

    名称空间 p 注入:

<!-- 在名称空间p注入时需要在schema约束中需要添加 -->
xmlns:p="http://www.springframework.org/schema/p"

<bean id="test" class="Test类全路径" p:属性名称="注入属性值"></bean>

    Spring注入复杂数据:

      数组类型注入:

<bean id="test" class="Test全路径">
    <property name="属性名">
        <list>
            <value>属性值1</value>
            <value>属性值2</value>
        </list>
    </property>
</bean>

      List 类型注入:

<bean id="test" class="Test全路径">
    <property name="属性名">
        <list>
            <value>属性值1</value>
            <value>属性值2</value>
        </list>
    </property>
</bean>

      Map 类型注入:

<bean id="test" class="Test全路径">
    <property name="属性名">
        <map>
            <entry key="键1" value="值1"></entry>
            <entry key="键2" value="值2"></entry>
        </map>
    </property>
</bean>

      Properties 类型注入:

<bean id="test" class="Test全路径">
    <property name="属性名">
        <props>
            <prop key="键1">value1</prop>
            <prop key="键2">value2</prop>
        </props>
    </property>
</bean>

ioc 和 di 区别:

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

Spring 整合Web项目原理:

  加载Spring核心配置文件,需要new ClassPathXmlApplicationContext("");功能来实现,效率低下。

  为解决该问题:

    1、把加载配置文件和创建对象过程,放在服务器启动时来完成。

    2、底层主要使用ServletContext对象、监听器。

      在服务器启动时,为每个项目创建一个ServletContext对象,在ServletContext对象创建时,使用监听器可以具体到ServletContext什么时候创建。使用监听器监听ServletContext对象创建时,加载Spring配置文件,把配置文件配置的对象创建。把创建的对象放到ServletContext域对象中。

    3、在Spring框架中已经封装了一个监听器,使用时只需要配置监听器即可。

      在web.xml中配置监听器,在配置监听器之前需要导入一个Spring整合的jar包:spring-web.release.jar

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

      配置完成监听器之后,需要指定加载spring配置文件的位置。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:配置文件路径</param-value>
</context-param>
posted @ 2019-03-11 15:49  水痕灬  阅读(317)  评论(0编辑  收藏  举报