zoukankan      html  css  js  c++  java
  • spring教程(一):简单实现(转)

    转:https://www.cnblogs.com/Lemon-i/p/8398263.html

     一、概念介绍

    1. 一站式框架:管理项目中的对象。spring框架性质是容器(对象容器)

    2. 核心是控制反转(IOC)和面向切面(AOP)

    IOC:反转控制--将创建对象的方式反转

        自己创建、维护对象-->由spring完成创建、注入

        反转控制就是反转了对象的创建方式,从自己创建反转给了程序

    DI:依赖注入--实现IOC需要DI做支持

        注入方式:set、构造方法、字段 注入

        注入类型:值类型(8大数据类型)、引用类型(对象) 注入

    二、简单实现

    1.导包

    首先根据图找到需要的jar包,再导入日志包

    导入包后项目结构如图所示

     2.创建一个对象 bean

    User.xml

    package com.dic.bean;

    public class User {

    private String name;
    private String age;


    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getAge() {
    return age;
    }
    public void setAge(String age) {
    this.age = age;
    }

    }

    User.xml

    3.配置核心 xml 文件

            对名字、位置没有具体要求,一般命名为 applicationContext.xml 放置在 src 下

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">


    <!-- 将user对象交给spring -->
    <!--
    name:调用时用的名字
    class:路径
    -->
    <bean name="user" class="com.dic.bean.User"></bean>


    </beans>

    applicationContext.xml

    4. junit 测试以下代码,控制台打印不为空且无报错即为成功

    Demo1.java

    package com.dic.text;

    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import com.dic.bean.User;

    public class Demo1 {

    @Test
    public void fun1(){

    //1 创建容器对象
    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    //2 向容器"要"user对象
    User u = (User) ac.getBean("user");
    //3 打印user对象
    System.out.println(u);


    }

    }

    Demo1.java

    三、<bean>元素详解    注释都写在代码里,也可以直接看第四部分

    1. 元素解释

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
    
    
        <!-- bean元素:使用该元素描述需要spring容器管理的对象 -->
        <!-- 
            name:调用时用的名字
            class:路径
            id:与name属性作用一样但名称不可重复且不能使用特殊字符
            scope属性:
                singleton(默认值):单例对象,在spring容器中启动时创建,只存在一个
                prototype:多例原型,每次在获得时才会创建,每次都创建一个新的
        -->
        <bean name="user" class="com.dic.bean.User></bean>
    
    </beans>
    复制代码

    2. 模块化配置:即将bean分散在多个文件中配置,在 applicationContext.xml 中添加一句引用即可

    <!-- 导入其他spring配置文件 -->
    <import resource="com/dic/bean/applicationContext.xml"/>

    3. 属性注入之 set 注入

        分为 set 注入、对象注入两种,在 xml 中注入内容如下

    复制代码
    <!-- set注入  -->
         <bean name="user1" class="com.dic.bean.User1">
               <property name="name" value="tom"></property>
               <property name="age" value="18"></property>
         </bean>
         
      
    <!-- 对象注入 -->
         <!-- 1. -->
         <bean name="car" class="com.dic.bean.Car">
               <property name="name" value="的健康的"></property>
               <property name="color" value="yellow"></property>
         </bean>
         <!-- 2. -->
         <bean name="user2" class="com.dic.bean.User2">
               <property name="name" value="tom"></property>
               <property name="age" value="18"></property>
               <property name="Car" ref="car"></property>
         </bean>
    复制代码

    4. 属性注入之构造方式注入

       1. 在 User3.java 中添加构造方法

    public User3(String name, Car car) {
        System.out.println("构造方式");
        this.name = name;
        this.car = car;
    }

        2. 在 applicationContext.xml 中添加配置  注意赋值标签不一样

         <!-- 构造方法注入    -->
         <bean name="user3" class="com.dic.bean.User3">
               <constructor-arg name="name" value="嗯哼"></constructor-arg>
               <constructor-arg name="car" ref="car"></constructor-arg>
          </bean>

        构造方式注意:出现同名参数时指定参数类型

    <bean name="user3" class="com.dic.bean.User3">
               <!-- 出现同名参数 用type指定参数类型即可  -->
               <constructor-arg name="name" value="11" type="java.lang.Integer"></constructor-arg>
               <constructor-arg name="car" ref="car"></constructor-arg>
          </bean>

    5. 复杂类型注入

    复杂的类型注入,如:数组、list、map、properties

    复制代码
     1      <!-- 复杂类型注入  使用set方式   -->
     2   
     3          <bean name="user4" class="com.dic.bean.User4">
     4              <!-- array -->
     5                  <!-- 如果数组中只有一个值,也可使用 name value   -->
     6                  <property name="arr">
     7                      <array>
     8                          <value>tom</value>
     9                          <value>jerry</value>
    10                          <ref bean="user2"/>
    11                      </array>
    12                  </property>           
    13              <!-- list -->
    14                  <property name="list">
    15                      <list>
    16                          <value>jack</value>
    17                          <value>rose</value>
    18                          <ref bean="user2" />
    19                      </list>
    20                  </property>     
    21              <!-- map -->
    22                  <property name="map">
    23                      <map>
    24                         <entry key="url" value="jdbc:mysql:///crm" ></entry>
    25                         <entry key="user" value-ref="user"  ></entry>
    26                         <entry key-ref="user3" value-ref="user2"  ></entry>
    27                      </map>
    28                  </property>
    29              <!-- pro -->
    30                  <property name="pro">
    31                      <props>
    32                         <prop key="driverClass">com.jdbc.mysql.Driver</prop>
    33                         <prop key="userName">root</prop>
    34                         <prop key="password">root</prop>
    35                     </props>
    36                  </property>
    37          </bean>
    复制代码

    四、代码整理

    package com.dic.bean;

    public class Car {

    private String name;
    private String color;

    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getColor() {
    return color;
    }
    public void setColor(String color) {
    this.color = color;
    }

    }

    Car.java

    package com.dic.bean;

    public class User {

    private String name;
    private String age;


    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getAge() {
    return age;
    }
    public void setAge(String age) {
    this.age = age;
    }

    }

    User.java

    package com.dic.bean;

    public class User1 {

    private String name;
    private String age;


    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getAge() {
    return age;
    }
    public void setAge(String age) {
    this.age = age;
    }

    }

    User1.java

    package com.dic.bean;

    public class User2 {

    private String name;
    private String age;
    private Car car;


    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getAge() {
    return age;
    }
    public void setAge(String age) {
    this.age = age;
    }
    public Car getCar() {
    return car;
    }
    public void setCar(Car car) {
    this.car = car;
    }

    }

    User2.java

    package com.dic.bean;

    public class User3 {

    private String name;
    private String age;
    private Car car;


    public User3(String name, Car car) {
    System.out.println("构造方式");
    this.name = name;
    this.car = car;
    }


    //出现同参数名
    public User3(Integer name, Car car) {
    System.out.println("同名参数构造方式");
    this.name = name+"";
    this.car = car;
    }

    }

    User3.java

    package com.dic.bean;

    import java.util.List;
    import java.util.Map;
    import java.util.Properties;

    public class User4 {

    private Object[] arr;
    private List list;
    private Map map;
    private Properties pro; //实际上就是一个map



    public Object[] getArr() {
    return arr;
    }
    public void setArr(Object[] arr) {
    this.arr = arr;
    }
    public List getList() {
    return list;
    }
    public void setList(List list) {
    this.list = list;
    }
    public Map getMap() {
    return map;
    }
    public void setMap(Map map) {
    this.map = map;
    }
    public Properties getPro() {
    return pro;
    }
    public void setPro(Properties pro) {
    this.pro = pro;
    }


    }

    User4.java

    package com.dic.text;

    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import com.dic.bean.User;
    import com.dic.bean.User1;
    import com.dic.bean.User2;
    import com.dic.bean.User3;

    public class Demo1 {

    @Test
    public void fun1(){

    //1 创建容器对象
    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    //2 向容器"要"user对象
    User u = (User) ac.getBean("user");
    //3 打印user对象
    System.out.println(u);

    User1 u1 = (User1) ac.getBean("user1");
    System.out.println(u1);

    User2 u2 = (User2) ac.getBean("user2");
    System.out.println(u2);


    User3 u3 = (User3) ac.getBean("user3");
    System.out.println(u3);

    }

    }

    Demo1.java

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">


    <!-- bean元素:使用该元素描述需要spring容器管理的对象 -->
    <!--
    name:调用时用的名字
    class:路径
    id:与name属性作用一样但名称不可重复且不能使用特殊字符
    scope属性:
    singleton(默认值):单例对象,在spring容器中启动时创建,只存在一个
    prototype:多例原型,每次在获得时才会创建,每次都创建一个新的
    -->
    <bean name="user" class="com.dic.bean.User"></bean>


    <!-- set注入 -->
    <bean name="user1" class="com.dic.bean.User1">
    <property name="name" value="tom"></property>
    <property name="age" value="18"></property>
    </bean>

    <!-- 对象注入 -->
    <!-- 1. -->
    <bean name="car" class="com.dic.bean.Car">
    <property name="name" value="的健康的"></property>
    <property name="color" value="yellow"></property>
    </bean>
    <!-- 2. -->
    <bean name="user2" class="com.dic.bean.User2">
    <property name="name" value="tom"></property>
    <property name="age" value="18"></property>
    <property name="Car" ref="car"></property>
    </bean>


    <!-- 构造方法注入 -->
    <bean name="user3" class="com.dic.bean.User3">
    <!-- 出现同名参数 用type指定参数类型即可 -->
    <constructor-arg name="name" value="11" type="java.lang.Integer"></constructor-arg>
    <constructor-arg name="car" ref="car"></constructor-arg>
    </bean>


    <!-- 复杂类型注入 使用set方式 -->

    <bean name="user4" class="com.dic.bean.User4">
    <!-- array -->
    <!-- 如果数组中只有一个值,也可使用 name value -->
    <property name="arr">
    <array>
    <value>tom</value>
    <value>jerry</value>
    <ref bean="user2"/>
    </array>
    </property>
    <!-- list -->
    <property name="list">
    <list>
    <value>jack</value>
    <value>rose</value>
    <ref bean="user2" />
    </list>
    </property>
    <!-- map -->
    <property name="map">
    <map>
    <entry key="url" value="jdbc:mysql:///crm" ></entry>
    <entry key="user" value-ref="user" ></entry>
    <entry key-ref="user3" value-ref="user2" ></entry>
    </map>
    </property>
    <!-- pro -->
    <property name="pro">
    <props>
    <prop key="driverClass">com.jdbc.mysql.Driver</prop>
    <prop key="userName">root</prop>
    <prop key="password">root</prop>
    </props>
    </property>
    </bean>




    <!-- 导入其他配置文件
    <import resource="com/dic/bean/applicationContext.xml"/>
    -->

    </beans>

    applicationContext.xml

  • 相关阅读:
    进程对象的属性或方法详解
    进程理论以及开启子进程的两种方式
    计算机发展史(多道技术)
    基于socketserver实现的并发(tcp和udp)
    基于udp协议的套接字及udp协议粘包问题
    模拟ssh的远程网络传输
    周考题目及答案
    c/s架构搭建
    网络编程基础
    10.16模拟赛(湖南集训)
  • 原文地址:https://www.cnblogs.com/zhanglijun/p/9082994.html
Copyright © 2011-2022 走看看