zoukankan      html  css  js  c++  java
  • spring框架ioc(控制反转)第三讲

     spring管理struts2action:

    前面介绍了spring对dao层和service层的管理,下面来说一下对action层的管理

    action中从spring容器获取bean实例。

    由于actionstruts2框架进行实例化,所以无法实现依赖注入(将service注入到action的属性中)。

    解决:

    springaction进行实例化,完成action的依赖的注入。

    注意:springbean进行实例化是前提,才可以对bean进行依赖注入。

    在这之前要先了解一下bean的作用域,spring提供了一下几种作用域:

    重点

    1singleton:单例,系统在运行中只有一个实例

    在加载spring容器时候将bean实例化好了,只实例化一次。

    spring容器对bean的管理默认就是单例。

    2prototype:多例,每次访问都要创建一个实例。

    调用applicationContext.getBean方法时,都会创建一个实例。

    所以在这里只有action层是多例,其它层都是单例,因为action层除了依赖service层之外还有其他的数据域的成员变量,级当类线程安全时可以用单例,没有数据域的成员变量(具有状态的属性)

     springweb系统整合

    applicationContextspring的容器实例对象,对它的管理采取单例。

    spring提供方案对applicationContext容器实例对象进行单例管理:

    applicationContextservletContext(单例)绑定。

    采用方法:在web.xml添加监听器,当系统启动时候加载spring容器,创建spring容器的实例applicationContext,将applicationContextservletContext(单例)绑定。

    需要加入springweb层的整合包spring-web-4.2.4.RELEASE.jar

    <!-- 监听器,加载spring的配置文件,创建spring容器实例,和servletContext进行绑定 -->

    <!-- 加载spring容器,与servletContext绑定 -->

    <listener>

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

    </listener>

    <!-- 如果不指定contextConfigLocation,默认加载/WEB-INF/applicationContext.xml -->

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <!-- spring配置文件 可以采用加载多个文件,中间以半角逗号分隔,也可以使用通配符号 -->

    <param-value>classpath:spring/applicationContext.xml</param-value>

    </context-param>

    springstruts2整合

    第一步:将actionspring容器配置

    第二步:在struts.xml配置beannameid

     

    总结:基于spring的完整开发

    dao

     service

     spring容器中配置service,配置service依赖的属性:

    action

     

    spring容器配置action

    struts.xml配置action

     

    以上就是完整的使用spring进行开发客户管理系统,测试后并没有什么问题。

    基于注解方式进行IOC开发

    除了上述开发方式外,spring还给我们提供了更简单的注解开发:

    使用注解,spring通过注解方式完成bean的管理。

    bean的管理包括两部分:

    1、对 bean实例化

    2、对bean依赖注入

    准备环境

    applicationContext.xml文件置空

    加入spring-aop-4.2.4.RELEASE.jar

     

    spring中提供了@component标识就是一个bean

    @Component可以用在任何的bean上。

    配置context:component-scan组件扫描:

    引入context命名空间

    <beans xmlns="http://www.springframework.org/schema/beans"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

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

    <!-- 配置组件扫描

    component-scan可以扫描注解:@controller@Service@Repository@Component

    指定扫描的包cn.itcast.crm,可以扫描子包下的类

     -->

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

    </beans>

    原理:

    在加载spring容器时,根据上边配置的包路径,扫描包下的及子包下的类,如果标识了@controller@Service@Repository@Component进行实例化。

     依赖注入的注解:

    @Autowired

    按类型注入

    1、可以标识在属性上,根据属性类型去spring容器中找同类型的bean,找到则将bean注入到属性中。

    @Autowired//按类型注入

    private CustomerDao customerDao;

     注意:如果容器中同一个类型的bean如果有多个,使用Autowried报错,找到多个同类型的bean,使用@QualifierAutowired配置配置,Qualifier指定将哪个bean注入进来。

    可以用在set方法上。

    set方法中参数类型,根据参数类型从容器中找bean,注入。

    @Resource

    按名称注入

     

    autoWired区别:Resource注解是jdk下的,而autoWiredspring提供。

  • 相关阅读:
    oracle外连接 (+)
    Struts 2的架构和运行流程
    struts2.3.15.1 中jsp:include与jsp:forward的用法
    tomcat6.0添加ssi(*.shtml)配置
    DWZ 刷新 dialog
    java将多个连续的空格转化成一个空格
    IE下不支持option的onclick事件
    struts2中的常量
    java.imageIo给图片添加水印
    java集合的互转
  • 原文地址:https://www.cnblogs.com/jingyukeng/p/10241409.html
Copyright © 2011-2022 走看看