zoukankan      html  css  js  c++  java
  • 初学者易上手的SSH-spring 01控制反转(IOC)

    这章开始学习SSH中最后的一个框架spring。Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。

    首先就来学习一下IOC,它的好处就是降低了耦合,主要是通过bean之间的依赖关系尽可能地抓换为关联关系。

    那么来基于maven项目来配置一个spring吧。

    首先可以下载一个spring的插件:可在eclipse->Help->Eclipse Marketplace中搜索spring,然后找到spring tools进行下载即可,其它下载方式就不过多介绍了。

    第一步:maven项目中的pom.xml中导入spring的依赖:spring-context,我以4.3.10版本为例

    <!-- spring-context 依赖 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.3.10.RELEASE</version>
            </dependency>

    第二步:在src/main/resources文件夹下建立一个xml,取名为applicationContext.xml。在里面加上spring表头文件,如下

    <?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    
    </beans>
    
    
    标签的解释:
    xmlns=XML Name space
    xmlns: 关于初始化bean的格式文件地址
    xmlns:xsi: 辅助初始化bean
    xsi:context: 关于spring上下文,包括加载资源文件
    xmlns:tx 事务标签的约束
    xmlns:aop    aop(面向切面)标签的约束
    xsi:schemaLocation: 用于声明了目标名称空间的模式文档

    第三步:新建一个人的类,给上name,age属性,封装构造,tostring即可。

    第四步:开始配置一个bean,来实现IOC。在applicationContext.xml,配置如下:

        <bean id="person" class="com.entity.Person"></bean>
    //id为这个bean的名称自己定义就好,class为要配置类的全限定路径
    //当然也可以使用name属性来代替id属性,name属性可以使用特殊符号来定义名称

    第五步:再建立一个类,用main方法或者用junit的@Test来进行测试,测试代码如下

        // 延时加载(懒加载) 返回的对象只有一个 单列模式
            // 加载文件
             BeanFactory factory = new XmlBeanFactory(new
             ClassPathResource("applicationContext.xml"));
             获取bean对象
             Person p = (Person) factory.getBean("person");
             System.out.println(p);
        // 及时加载   一个bean能够创建多个对象
            ApplicationContext aContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            // 获取bean对象
            Person p = (Person) aContext.getBean("person");
            System.out.println(p);

    这样一个简单的bean就配置完了。

    我们可以在bean后面加上一个属性scope以及init-method属性。

    scope属性值:

    singleton(默认值) 

    在每个Spring Ioc容器中一个bean定义对应一个对象实例(单例模式)
    prototype
    一个bean定义对应多个对象实例.
    request
    在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效.
    session
    在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    global session
    在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效.

    init-method属性的意思是这个bean初始化的时候调用哪个方法,属性值为bean对应这个类中的方法名即可。

    接下来看下注入方式:

     首先bean标签里面添加property标签,name对应属性名称,value对应属性值

    1.比如给这个对象的属性设置默认值

     <bean id="person" class="com.entity.Person">
    <!--属性设置默认值 -->
            <property name="name" value="哈哈"></property>
            <property name="age" value="11"></property>
    </bean>

    2.注入一个集合(set,list),以list为例

    在persion类中加上一个lsit<string>的属性,封装

    注入:

    <bean id="person" class="com.entity.Person">
    //ls为list<string>的变量名
        <property name="ls">
                <list>
                    <value>谷歌</value>
                    <value>呵呵</value>
                    <value>嘻嘻</value>
                </list>
            </property>
    </bean>

    3.构造注入

    //构造注入时,实体类中需存在相应的构造方法
    <bean id="person" class="com.entity.Person"> <constructor-arg name="name" value="1"></constructor-arg> <constructor-arg name="age" value="18"></constructor-arg> </bean>

    4.注入对象

    新建实体类card,给上cid,cname两个属性,封装构造。

    在applicationContext.xml中增加一个bean

        <bean id="card" class="com.entity.Card" >    </bean>

    card类中加上persion对象属性,封装。

    然后在card的bean中注入

     <bean id="card" class="com.entity.Card" >   
    //name 对象变量名
        <property name="person">
    //ref对应属性类在bean的标签ID
                <ref bean="person" />
    //idref元素的功能与<value>类似,只是idref多了验证的功能
    <!-- <idref bean="person" /> --> </property> </bean>

    测试我这里就没试了。除了上面这几种注入,还可以百度看看静态工厂的方法注入以及实例工厂的方法注入。

    本章结束!

  • 相关阅读:
    live555学习之RTSP连接建立以及请求消息处理过程
    RTSP协议学习笔记
    RTP头结构解析
    Doubango ims 框架 分析之 多媒体部分
    VMware虚拟机 NAT模式 配置静态ip
    计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解
    VMWare VMNet 8 的配置使用
    VMware虚拟机CentOS7
    如何禁止虚拟机自动获取DHCP分配的ip地址
    Linux之VMware虚拟机取消DHCP
  • 原文地址:https://www.cnblogs.com/lzx2509254166/p/7817987.html
Copyright © 2011-2022 走看看