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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://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、 代码以及配置

转载于:https://www.cnblogs.com/h-g-f-s123/p/6404572.html

Published by

风君子

独自遨游何稽首 揭天掀地慰生平