• spring教程(一):简单实现


    一、概念介绍

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

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

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

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

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

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

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

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

    二、简单实现

    1.导包

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

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

     2.创建一个对象 bean

     1 package com.dic.bean;
     2 
     3 public class User {
     4     
     5     private String name;
     6     private String age;
     7     
     8     
     9     public String getName() {
    10         return name;
    11     }
    12     public void setName(String name) {
    13         this.name = name;
    14     }
    15     public String getAge() {
    16         return age;
    17     }
    18     public void setAge(String age) {
    19         this.age = age;
    20     }
    21 
    22 }
    User.xml

    3.配置核心 xml 文件

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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 
     3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
     4 
     5 
     6     <!-- 将user对象交给spring -->
     7     <!-- 
     8         name:调用时用的名字
     9         class:路径
    10     -->
    11        <bean name="user" class="com.dic.bean.User"></bean>
    12         
    13        
    14 </beans>
    applicationContext.xml

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

     1 package com.dic.text;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 import com.dic.bean.User;
     8 
     9 public class Demo1 {
    10     
    11     @Test
    12     public void fun1(){
    13         
    14         //1 创建容器对象
    15         ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    16         //2 向容器"要"user对象
    17         User u = (User) ac.getBean("user");
    18         //3 打印user对象
    19         System.out.println(u);
    20         
    21         
    22     }
    23 
    24 }
    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>

    四、代码整理

     1 package com.dic.bean;
     2 
     3 public class Car {
     4     
     5     private String name;
     6     private String color;
     7     
     8     public String getName() {
     9         return name;
    10     }
    11     public void setName(String name) {
    12         this.name = name;
    13     }
    14     public String getColor() {
    15         return color;
    16     }
    17     public void setColor(String color) {
    18         this.color = color;
    19     }
    20 
    21 }
    Car.java
     1 package com.dic.bean;
     2 
     3 public class User {
     4     
     5     private String name;
     6     private String age;
     7     
     8     
     9     public String getName() {
    10         return name;
    11     }
    12     public void setName(String name) {
    13         this.name = name;
    14     }
    15     public String getAge() {
    16         return age;
    17     }
    18     public void setAge(String age) {
    19         this.age = age;
    20     }
    21 
    22 }
    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
     1 package com.dic.bean;
     2 
     3 public class User2 {
     4     
     5     private String name;
     6     private String age;
     7     private Car car;
     8     
     9     
    10     public String getName() {
    11         return name;
    12     }
    13     public void setName(String name) {
    14         this.name = name;
    15     }
    16     public String getAge() {
    17         return age;
    18     }
    19     public void setAge(String age) {
    20         this.age = age;
    21     }
    22     public Car getCar() {
    23         return car;
    24     }
    25     public void setCar(Car car) {
    26         this.car = car;
    27     }
    28 
    29 }
    User2.java
     1 package com.dic.bean;
     2 
     3 public class User3 {
     4     
     5     private String name;
     6     private String age;
     7     private Car car;
     8     
     9     
    10     public User3(String name, Car car) {
    11         System.out.println("构造方式");
    12         this.name = name;
    13         this.car = car;
    14     }
    15     
    16     
    17     //出现同参数名 
    18     public User3(Integer name, Car car) {
    19         System.out.println("同名参数构造方式");
    20         this.name = name+"";
    21         this.car = car;
    22     }
    23 
    24 }
    User3.java
     1 package com.dic.bean;
     2 
     3 import java.util.List;
     4 import java.util.Map;
     5 import java.util.Properties;
     6 
     7 public class User4 {
     8     
     9     private Object[] arr; 
    10     private List list;
    11     private Map map;
    12     private Properties pro;  //实际上就是一个map
    13     
    14     
    15     
    16     public Object[] getArr() {
    17         return arr;
    18     }
    19     public void setArr(Object[] arr) {
    20         this.arr = arr;
    21     }
    22     public List getList() {
    23         return list;
    24     }
    25     public void setList(List list) {
    26         this.list = list;
    27     }
    28     public Map getMap() {
    29         return map;
    30     }
    31     public void setMap(Map map) {
    32         this.map = map;
    33     }
    34     public Properties getPro() {
    35         return pro;
    36     }
    37     public void setPro(Properties pro) {
    38         this.pro = pro;
    39     }
    40 
    41     
    42 }
    User4.java
     1 package com.dic.text;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 import com.dic.bean.User;
     8 import com.dic.bean.User1;
     9 import com.dic.bean.User2;
    10 import com.dic.bean.User3;
    11 
    12 public class Demo1 {
    13     
    14     @Test
    15     public void fun1(){
    16         
    17         //1 创建容器对象
    18         ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    19         //2 向容器"要"user对象
    20         User u = (User) ac.getBean("user");
    21         //3 打印user对象
    22         System.out.println(u);
    23         
    24         User1 u1 = (User1) ac.getBean("user1");
    25         System.out.println(u1);
    26         
    27         User2 u2 = (User2) ac.getBean("user2");
    28         System.out.println(u2);
    29         
    30         
    31         User3 u3 = (User3) ac.getBean("user3");
    32         System.out.println(u3);
    33         
    34     }
    35 
    36 }
    Demo1.java
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 
     3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
     4 
     5 
     6     <!-- bean元素:使用该元素描述需要spring容器管理的对象 -->
     7     <!-- 
     8         name:调用时用的名字
     9         class:路径
    10         id:与name属性作用一样但名称不可重复且不能使用特殊字符
    11         scope属性:
    12             singleton(默认值):单例对象,在spring容器中启动时创建,只存在一个
    13             prototype:多例原型,每次在获得时才会创建,每次都创建一个新的
    14     -->
    15     <bean name="user" class="com.dic.bean.User"></bean>
    16     
    17     
    18     <!-- set注入  -->
    19        <bean name="user1" class="com.dic.bean.User1">
    20            <property name="name" value="tom"></property>
    21            <property name="age" value="18"></property>
    22        </bean>
    23        
    24     <!-- 对象注入 -->
    25        <!-- 1. -->
    26        <bean name="car" class="com.dic.bean.Car">
    27            <property name="name" value="的健康的"></property>
    28            <property name="color" value="yellow"></property>
    29        </bean>
    30        <!-- 2. -->
    31        <bean name="user2" class="com.dic.bean.User2">
    32            <property name="name" value="tom"></property>
    33            <property name="age" value="18"></property>
    34            <property name="Car" ref="car"></property>
    35        </bean>
    36        
    37        
    38      <!-- 构造方法注入    -->
    39         <bean name="user3" class="com.dic.bean.User3">
    40            <!-- 出现同名参数 用type指定参数类型即可  -->
    41            <constructor-arg name="name" value="11" type="java.lang.Integer"></constructor-arg>
    42            <constructor-arg name="car" ref="car"></constructor-arg>
    43         </bean>
    44        
    45        
    46      <!-- 复杂类型注入  使用set方式   -->
    47   
    48          <bean name="user4" class="com.dic.bean.User4">
    49              <!-- array -->
    50                  <!-- 如果数组中只有一个值,也可使用 name value   -->
    51                  <property name="arr">
    52                      <array>
    53                          <value>tom</value>
    54                          <value>jerry</value>
    55                          <ref bean="user2"/>
    56                      </array>
    57                  </property>           
    58              <!-- list -->
    59                  <property name="list">
    60                      <list>
    61                          <value>jack</value>
    62                          <value>rose</value>
    63                          <ref bean="user2" />
    64                      </list>
    65                  </property>     
    66              <!-- map -->
    67                  <property name="map">
    68                      <map>
    69                         <entry key="url" value="jdbc:mysql:///crm" ></entry>
    70                         <entry key="user" value-ref="user"  ></entry>
    71                         <entry key-ref="user3" value-ref="user2"  ></entry>
    72                      </map>
    73                  </property>
    74              <!-- pro -->
    75                  <property name="pro">
    76                      <props>
    77                         <prop key="driverClass">com.jdbc.mysql.Driver</prop>
    78                         <prop key="userName">root</prop>
    79                         <prop key="password">root</prop>
    80                     </props>
    81                  </property>
    82          </bean>
    83     
    84     
    85     
    86     
    87     <!-- 导入其他配置文件
    88            <import resource="com/dic/bean/applicationContext.xml"/>
    89        -->
    90        
    91 </beans>
    applicationContext.xml
  • 相关阅读:
    MVC 数据库增删改查(2) 视图
    MVC 数据库增删改查(1)
    委托的4种写法
    wpf 多线程操作(2)
    wpf 多线程操作例(1)
    网络抓取邮箱
    wpf 点击新建弹出新的窗口
    wpf 数据绑定 联系
    wpf 在listview里添加数据
    面向对象:抽象基类,接口
  • 原文地址:https://www.cnblogs.com/Lemon-i/p/8398263.html
Copyright © 2020-2023  润新知