zoukankan      html  css  js  c++  java
  • Spring框架及IOC容器

      Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发。Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring。

    1.Spring 6个模块

    Spring提供了一站式解决方案:

    1) Spring Core  spring的核心功能: IOC容器, 解决对象创建及依赖关系

    2) Spring Web  Spring对web模块的支持。

    可以与struts整合,让struts的action创建交给spring

    spring mvc模式

    3) Spring DAO  Spring 对jdbc操作的支持  【JdbcTemplate模板工具类】

    4) Spring ORM  spring对orm的支持:

    可以与hibernate整合

    也可以使用spring的对hibernate操作的封装

    5)Spring AOP  切面编程

    6)SpringEE   spring 对javaEE其他模块的支持

    2.引入jar文件

    commons-logging-1.1.3.jar                  日志

    spring-beans-3.2.5.RELEASE.jar           bean节点

    spring-context-3.2.5.RELEASE.jar         spring上下文节点

    spring-core-3.2.5.RELEASE.jar             spring核心功能

    spring-expression-3.2.5.RELEASE.jar    spring表达式相关表

    3.核心配置文件

    applicationContext.xml:

    <?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:p="http://www.springframework.org/schema/p"
           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/context
            http://www.springframework.org/schema/context/spring-context.xsd">
        <!--IOC容器的配置,要创建的所有对象都配置在这里-->
        <bean id="user" class="com.juaner.spring.User" scope="prototype" lazy-init="true"/>
    </beans>

    4.使用Spring容器

        @Test
        public void test2() {
            ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("com/juaner/spring/applicationContext.xml");
            User user = (User) ac.getBean("user");
            System.out.println(user);
        }

    5.实例化bean

      bean的属性scope指定单例、多例模式。

      如果为单例模式,对象在容器初始化之前创建,lazy_init可以延迟初始化到对象使用时才创建对象,支队单例有效。

      如果为多例模式,对象在使用时创建。

        <!--默认无参数构造器-->
        <bean id="user" class="com.juaner.spring.User" scope="prototype" lazy-init="true"/>
        <!--带参数的构造器-->
        <bean id="user1" class="com.juaner.spring.User" scope="prototype" lazy-init="true">
            <constructor-arg value="100"> </constructor-arg>
            <constructor-arg value="juaner"> </constructor-arg>
        </bean>
        <!--使用工厂类创建对象-->
        <!--工厂类实例方法-->
        <bean id="factory" class="com.juaner.spring.ObjectFactory"></bean>
        <bean id="user2" factory-bean="factory" factory-method="getInstance"></bean>
        <!--工厂静态方法-->
        <bean id="user3" class="com.juaner.spring.ObjectFactory" factory-method="getStaticInstance"/>

    6.设置依赖注入(Dependency Injection)

             1) 通过构造函数

             2) 通过set方法给属性注入值

            <bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
            <bean id="userService" class="com.juaner.spring.dependencyInjection.UserService">
                <property name="userDao" ref="userDao"/>
            </bean>
            <bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction">
                <property name="userService" ref="userService"/>
            </bean>

             3) p名称空间,需要引入命名空间

           xmlns:p="http://www.springframework.org/schema/p"
            <bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
            <bean id="userService" class="com.juaner.spring.dependencyInjection.UserService" p:userDao-ref="userDao"/>
            <bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction" p:userService-ref="userService"/>

             4)自动装配

        通过属性名查找:

            <bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
            <bean id="userService" class="com.juaner.spring.dependencyInjection.UserService" autowire="byName"/>
            <bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction" autowire="byName"/>

        通过类型查找,必须确保改类型在IOC容器中只有一个对象;否则报错:

            <bean id="userDao" class="com.juaner.spring.dependencyInjection.UserDao"/>
            <bean id="userService" class="com.juaner.spring.dependencyInjection.UserService" autowire="byType"/>
            <bean id="userAction" class="com.juaner.spring.dependencyInjection.UserAction" autowire="byType"/>

             5) 注解

        引入context名称空间

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

        开启注解扫描

            <context:component-scan base-package="com.juaner.spring.dependencyInjection"/>

                创建对象以及处理对象依赖关系,相关的注解:

                     @Component   指定把一个对象加入IOC容器

          @Repository    作用同@Component; 在持久层使用

          @Service         作用同@Component; 在业务逻辑层使用

          @Controller     作用同@Component; 在控制层使用

          @Resource      属性注入

    7.完整配置

    <?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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd
             http://www.springframework.org/schema/aop
             http://www.springframework.org/schema/aop/spring-aop.xsd
             http://www.springframework.org/schema/tx
              http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <bean id="employeeAction" class="cn.itcast.action.EmployeeAction" scope="prototype">
            <property name="employeeService" ref="employeeService"></property>
        </bean>
        
    </beans>     
  • 相关阅读:
    组合与计数
    20160929训练记录
    奇特而有用的定理
    图论 500 题
    《长安十二时辰》愿你看尽世间百态,心中仍有热血
    洛谷 [P1337] 平衡点
    洛谷 [P3496] BLO
    洛谷 [P2341] 受欢迎的牛
    洛谷 [P3723] 礼物
    洛谷 [P3338] 力
  • 原文地址:https://www.cnblogs.com/juaner767/p/5578679.html
Copyright © 2011-2022 走看看