Spring第一天

来源:互联网 发布:杭州淘宝学院 编辑:程序博客网 时间:2024/05/22 06:39

Spring 框架

a.概述

Spring 框架: 可以解决对象创建以及对象之间依赖关系的一种框架。且可以和其他框架一起使用;spring与struts,spring与hibernat(起到整合作用的一个框架)Spring提供了一站式解决方案:1) Srping core :Spring的核心功能,ioc容器,解决对象创建及依赖关系.2) Srping Web :Spring对web模块的支持。 可以与struts整合,让struts的action创建交给srping3) Spring Dao Spring 对jdbc操作的支持【jdbcTemplate模板工具类】4) Spring ORM Spring 对orm的支持既可以与hibernate整合也可以使用Spring对hibernate操作的封装5) Spring AOP 切面编程6) Spirng EE Spring对javaEE其他模块的支持

b.开发步骤

    spring各个版本中:     在3.0以下的版本中,源码有spring中的相关的所有包【spring功能+依赖包】    在3.0以上的版本,源码中只有spring得到核心功能包【没有依赖包】(如果要是用依赖包,需要单独下载!)    1)源码:jar文件:    spring-framework-3.25 RELEASE    commons-longging-1.13.jar 日志    spring-beans-3.25.RELEASE.jar bean节点    spring-context-3.25.RELEASE.jar spring 上下文节点    spring-core-3.25.RELEASE.jar spring核心功能    spring-experssion-3.25.RELEARSE.jar spring表达式相关表    上是必须引入的5个jar文件,在项目中可以用户库管理

2) 核心配置文件:applicationContext.xml    Spring配置文件:applicationContext.xml/bean.xml约束参考:spring-framework-3.2.5.RELEASE\docs\spring-framework-reference\htmlsingle\index.html

<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"></beans>   

Bean对象的细节:1)对象创建:单例/多例scope="singleton" ,singleton,即是单例模式 [server/dao/工具类]scope="prototype"多例;  【Action对象】2)什么是创建?scope="singleton"  在程序启动的时候就已经创建了scope="prototype" 在用到对象的时候才创建创建3)是否延迟创建lazy_init="false" 默认为false ,不延迟创建,在启动程序的时候就创建对象lazy_init="true"  延迟初始化,在用到对象的时候才创建对象(只对单例有效)4)创建对象之后,初始化/销毁inti-method="init_user" 【对应对应的init_user方法,在对象创建之后执行】
    @Test    public void testIOC()throws Exception {    // 得到IOC容器对象  【用实现类,因为要调用销毁的方法】    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml");    System.out.println("-----容器创建-----");    // 从容器中获取bean    User user1 = (User) ac.getBean("user");    User user2 = (User) ac.getBean("user");    System.out.println(user1);    System.out.println(user2);    // 销毁容器对象    ac.destroy();    }

SpringIOC 容器

springIoc容器是Spring核心内容作用:创建对象&处理对象的依赖关系容器创建对象:创建对象有几种方式:1)调用无参构造器2)调用参数构造器3) 工厂创建对象-- 工厂类,静态方法创建对象-- 工厂类,非静态方法创建对象

<?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="user1" class="cn.itcast.b_create.User" scope="singleton"> </bean>-->    <!--带参构造器-->    <bean id="user" class="cn.itcast.b_create.User" scope="singleton">        <constructor-arg value="Jack" index="0" type="java.lang.String" ></constructor-arg>        <constructor-arg value="100" index="1" type="int"></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="user2" class="cn.itcast.b_create.User" scope="singleton">        <constructor-arg  index="0" type="java.lang.String" ref="str"></constructor-arg>        <constructor-arg value="100" index="1" type="int"></constructor-arg>    </bean>    <!--工厂类创建对象-->    <!--实例方法-->    <!--先创建工厂-->    <bean id="factory" class="cn.itcast.b_create.ObjectFactory"></bean>    <!--在创建User对象,用factory的实例方法-->    <bean id="user3" factory-bean="factory" factory-method="getInstance"></bean>          <!--工厂类:静态方法-->    <bean id="user4" factory-method="getStaticInstance" class="cn.itcast.b_create.ObjectFactory"></bean>    <!--    class 指定的就是静态方法    factory-bena 指定的是实例化方法    --></beans>

对象依赖关系如何给对象的属性赋值?1)通过构造函数2)通过set方法给属性注入值3)p名称空间4)自动装配

<?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"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <bean id="user" class="cn.itcast.c_property.User" >        <constructor-arg value="jack"></constructor-arg>        <constructor-arg value="100"></constructor-arg>    </bean>    <bean id="user1" class="cn.itcast.c_property.User">        <property name="id" value="0001"></property>        <property name="name" value="jack"></property></bean>    <!--创建userdao-->    <bean id="userDao" class="cn.itcast.c_property.UserDao"></bean>    <!--创建userService-->    <bean id="userService" class="cn.itcast.c_property.UserService">        <!--要注入userDao-->        <property name="userDao" ref="userDao"></property>    </bean>    <!--action instance-->    <bean id="userAction" class="cn.itcast.c_property.UserAction">        <!--处理对象的依赖关系,DL-->        <property name="userService" ref="userService"></property>    </bean><!--内部bean--><bean id="userAction1" 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></beans>
内部bean和直接一步一步的注入的区别:        1)内部bean注入的bean不能被外部bean使用,相当于局部变量不能用到全局变量里面;        2)内部bean不太容易维护。

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"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <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="user" class="cn.itcast.c_property.User" p:name="灰太狼"></bean></beans>     

自动装配(了解)
更具名称自动装配:autowire=”byName”,并自动注入
自动去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"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">    <!--自动装配-->    <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean>    <bean id="userService" class="cn.itcast.d_auto.UserService"></bean>    <bean id="userAction" class="cn.itcast.d_auto.UserAction" autowire="byName"></bean></beans>

注解

注解方式可以简化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配置一起使用。3) Spring与Struts框架整合Spring,负责对象对象创建Struts, 用Action处理请求Spring与Struts框架整合,关键点:让struts框架action对象的创建,交给spring完成!Spring与Hibernate整合:【SSH整合:Spring与Struts关键点: action交给spring创建!Spring与Hibernate关键点: sessionFactory对象交给spring创建!】步骤:引入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源码】配置:4)配置XMLstruts.xml 【struts路径与action映射配置】bean.xml     【spring ioc容器配置】web.xml【核心过滤器: 引入struts功能】【初始化spring的ioc容器】【初始化spring的ioc容器】查看api。4) 代码以及配置

>Spring第二天