zoukankan      html  css  js  c++  java
  • Spring入门(1)

    一、Spring名词

    侵入式设计(struts)

          引入了框架则对现有的类的结构产生影响,例如Action类需要实现ActionSupport类。

    非侵入式设计

      与上相反。

    1、IOC(inversion on control)      控制反转

    2、依赖注入

          处理对象的依赖关系。

    3、AOP 面向切面编程

          切面简单的理解就是一个类,由许多重复的代码形成的类。

    举例:事物、日志、权限

    二、Spring框架

    2.1概述

      

      Spring框架:可以解决对象的创建以及对象之间依赖关系的一种框架。并且还可以和其他框架一起使用。Spring与Struts,Spring与hibernate;所以说Spring起到了框架整合的作用

    2.2六大模块

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

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

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

                          →可以和Struts整合,让Struts的Action创建交给spring

                          →springmvc模式

    3)Spring DAO   对jdbc操作的支持

    4)Spring ORM  对orm的支持表现在:

                          →可以与Hibernate整合

                          →也可以使用Spring对Hibernate操作的封装

    5)Spring AOP         切面编程(难点)

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

    2.3开发步骤

    1)下载源码

    2)引入jar包

    3)查看API,编写代码

    2.4 bean创建细节

    1、对象创建:单例/多例

          Scope = “singleton”,单例,默认值

          Scope =”prototype”多例的

    2、什么时候创建?

          Scope =”prototype”用到的时候才创建

          Scope = “singleton”启动的时候创建

    3、是否延迟创建

      Lazy-init=”false” 默认值为false,即不延迟创建,在启动的时候创建

      Lazy-init=”true”  延迟初始化,在用到的时候才初始化。

     三  SpringIOC容器

    3.1  创建对象

    IOC容器创建对象:

      创建对象的几种方式:

        (1)调用无参数构造器

        (2)调用有参数构造器

        (3)工厂创建对象

            工厂类,静态方法创建对象(类名.方法())

            工厂类,非静态方法创建对象(实例化对象.方法)

    bean.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">
        
        <!-- ###############对象创建############### -->
        
        <!-- 1. 默认无参数构造器 
        <bean id="user1" class="cn.itcast.b_create_obj.User"></bean>
        -->
        
        <!-- 2. 带参数构造器 -->
        <bean id="user2" class="cn.itcast.b_create_obj.User">
            <constructor-arg index="0" type="int" value="100"></constructor-arg>
            <constructor-arg index="1" type="java.lang.String" value="Jack"></constructor-arg>
        </bean>
        
        <!-- 定义一个字符串,值是"Jack" ;  String s = new String("jack")-->
        <bean id="str" class="java.lang.String">
            <constructor-arg value="Jacks"></constructor-arg>
        </bean>
        <bean id="user3" class="cn.itcast.b_create_obj.User">
            <constructor-arg index="0" type="int" value="100"></constructor-arg>
            <constructor-arg index="1" type="java.lang.String" ref="str"></constructor-arg>
        </bean>
        
        
        <!-- 3. 工厂类创建对象 -->
        <!-- # 3.1 工厂类,实例方法 -->
        <!-- 先创建工厂 -->
        <bean id="factory" class="cn.itcast.b_create_obj.ObjectFactory"></bean>
        <!-- 在创建user对象,用factory方的实例方法 -->
        <bean id="user4" factory-bean="factory" factory-method="getInstance"></bean>
        
        
        <!-- # 3.2 工厂类: 静态方法 -->
        <!-- 
            class 指定的就是工厂类型
            factory-method  一定是工厂里面的“静态方法”
         -->
        <bean id="user" class="cn.itcast.b_create_obj.ObjectFactory" factory-method="getStaticInstance"></bean>
        
    </beans>      
    View Code

    3.2  对象的依赖关系

    Spring中如何给对象的属性赋值呢?

          1) 通过构造函数

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

             3) p名称空间

             4)自动装配(了解)

             5) 注解

    1、常用:set方法注入值

    <!-- dao instance -->
        <bean id="userDao" class="cn.itcast.c_property.UserDao"></bean>
    
        <!-- service instance -->
        <bean id="userService" class="cn.itcast.c_property.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- action instance -->
        <bean id="userAction" class="cn.itcast.c_property.UserAction">
            <property name="userService" ref="userService"></property>
        </bean>

    2、内部bean

    <!-- ##############内部bean############## -->
        <bean id="userAction" class="cn.itcast.c_property.UserAction">
            <property name="userService">
                <bean class="cn.itcast.c_property.UserService">
                    <property name="userDao">
                        <bean class="cn.itcast.c_property.UserDao"></bean>
                    </property>
                </bean>
            </property>
        </bean>

    3、p名称空间注入属性值

    <?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">
        
        <!-- ###############对象属性赋值############### -->
        
        <!-- 
            给对象属性注入值:
                # p 名称空间给对象的属性注入值
                 (spring3.0以上版本才支持)
         -->
         <bean id="userDao" class="cn.itcast.c_property.UserDao"></bean>
         
         <bean id="userService" class="cn.itcast.c_property.UserService" p:userDao-ref="userDao"></bean>
         
         <bean id="userAction" class="cn.itcast.c_property.UserAction" p:userService-ref="userService"></bean>
        
        
        <!-- 传统的注入: 
         <bean id="user" class="cn.itcast.c_property.User" >
             <property name="name" value="xxx"></property>
         </bean>
        -->
        <!-- p名称空间优化后 -->
        <bean id="user" class="cn.itcast.c_property.User" p:name="Jack0001"></bean>
         
    </beans>   

    4、自动装配:Spring提供的自动装配主要是为了简化配置; 但是不利于后期的维护。不推荐使用

    根据名称自动装配:autowire="byName"

      

    <!-- ###############自动装配############### -->  
        <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean>    
        <bean id="userService" class="cn.itcast.d_auto.UserService" autowire="byName"></bean>
        <!-- 根据“名称”自动装配: userAction注入的属性,会去ioc容器中自动查找与属性同名的对象 -->
        <bean id="userAction" 
    class="cn.itcast.d_auto.UserAction" autowire="byName"></bean>

    根据类型自动装配:autowire="byType"

      必须确保IOC容器中同类型的对象只有一个。否则报错,因为电脑此时不知道调用哪一个。

    <?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" default-autowire="byType"><!--定义到全局不用每个节点都写了-->
        
        <!-- ###############自动装配############### -->  
        <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean>    
        <bean id="userService" class="cn.itcast.d_auto.UserService"></bean>
        
        <!-- 如果根据类型自动装配: 必须确保IOC容器中只有一个该类型的对象 -->
        <bean id="userAction" class="cn.itcast.d_auto.UserAction"></bean>
        
        
        <!--   报错: 因为上面已经有一个该类型的对象,且使用了根据类型自动装配
        <bean id="userService_test" class="cn.itcast.d_auto.UserService" autowire="byType"></bean>
         -->
    </beans>  

    5、注解:方式可以简化spring的IOC容器的配置!

    使用注解步骤:

             1)先引入context名称空间

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

             2)开启注解扫描

                       <context:component-scan base-package="cn.itcast.e_anno2"></context:component-scan>

           3)使用注解

                       通过注解的方式,把对象加入ioc容器。

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

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

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

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

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

    @Resource     属性注入

    总结:

             1) 使用注解,可以简化配置,且可以把对象加入IOC容器,及处理依赖关系(DI)
             2) 注解可以和XML配置一起使用。

    四  Spring与struts的整合

    【SSH整合:

                       Spring与Struts

                                关键点: 让struts框架的action对象的创建交给spring!

                       Spring与Hibernate

                                关键点: sessionFactory对象的创建交给spring!

    步骤:

    1、引入jar包

       1)引入struts .jar相关文件

             2)spring-core  相关jar文件

             3)spring-web 支持jar包

                       spring-web-3.2.5.RELEASE.jar         【Spring源码】

            struts2-spring-plugin-2.3.4.1.jar      【Struts源码】

    2、配置XML

      struts.xml                  【struts路径与action映射配置】

      bean.xml                  【spring ioc容器配置】

      web.xml                    

                   【核心过滤器: 引入struts功能】

                   【初始化spring的ioc容器】

    3、 代码以及配置

  • 相关阅读:
    SQL注入攻击
    Collections使用
    jquery实现table按时间排序
    浏览器存储及使用
    android实现屏幕旋转切换fragment
    安卓保存图片到图库demo总结
    android service基础
    正则表达式学习总结
    注解和枚举回顾
    Vue+Element项目日期选择器类型转化的问题
  • 原文地址:https://www.cnblogs.com/h-g-f-s123/p/6404572.html
Copyright © 2011-2022 走看看