zoukankan      html  css  js  c++  java
  • Spring入门(一)

    一、学前基础

    • 前端框架:

    JQ、BS、Easyui、AJAX

    • 后端框架:

    Spring、SpringMVC、MyBatis>>>>>SSM框架

    Spring+Struts2+Hibernate>>>>>>>SSH框架

    SpringBoot:对SSM的再一次封装

    SpringCloud:微服务

    • 什么是框架:

    框架其实就是软件的半成品,框架是将复杂的基础业务进行封装,提供更简洁的API给程序使用。使用框架的目的是提高开发效率以及组件之间的松耦合(耦合度越低越好)

    • Spring框架作用:

    1. 简化开发:之前连接数据库的时候,使用jdbc,需要打开连接,关闭连接等,Spring中有一个Springjdbc,就是简化jdbc的开发。使用Springjdbc就不需要关注数据库连接的过程和关闭连接等。

    2. IOC(控制反转):将创建对象管理对象交给Spring容器实现。

           IOC底层原理使用技术:

              ①xml配置文件

              ②dom4j解决xml

         ③工厂设计模式

         ④反射

           3.集成其他框架(如集成SpringMVC,mybatis,Struts2等),他可以自己单独使用,也可以配合其他框架使用

    注:spring是一个一站式框架,spring在javaee三层结构中,每一层都提供不同的解决技术

    -----web层:SpringMVC

    -----service:Spring的ioc

    -----dao层:Spring的jdbcTemplate

    使用的版本:Spring4.x

         4.AOP(面向切面编程):扩展功能不是修改源代码实现

         5.解耦

    二、如何使用Spring框架进行开发

    1. 导入spring框架包 :spring-webmvc

    <!--spring框架包,其中这个jar包含springmvc -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.8.RELEASE</version>
    </dependency>

    2.导入junit测试包

          <!-- 单元测试包 -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>

    3.创建类,在类里边创建方法

    • 在src/main/java中创建pojo包,在包中创建类写入想要实现的方法(不用创建对象的那种)

    例如在此创建了一个User类:

    public class User {
    
    public User() {
    
    System.out.println("执行User类的无参构造发方法");
    
       }
    
    public String getName() {
    
    return "tomcat";
    
       }
    
    }

    4.创建spring配置文件,创建配置类

    • 在项目中将配置文件ApplicationContext.xml放入src/main/resources中并编写配置文件(通过这个配置文件来创建对象)

    其实spring核心配置文件名称和位置不是固定的,建议放在src/main/resources中,建议名字为applicationContext.xml

    在这个之前得先了解bean标签的常用属性:

    • id属性:起名称,随便写,不能包含特殊符号

    • class属性:创建对象所在类的全路径(通常都是包名.类名

    • name属性:功能和id属性一样,但是name属性可以包含特殊符号

    • scope属性:决定spring管理的对象的作用域,默认为singleton单例模式

    例如:在配置文件ApplicationContext.xml中

    <bean id="user" class="pojo.User">

    在spring中通常有三种创建对象的方法(bean的实例化)

    • 通过无参的构造函数创建对象

     

    • 通过静态工厂模式创建对象

    • 通过非静态的工厂模式创建对象

    5.测试对象是否创建

    在src/test/java中建立测试包,并在该测试包中建立测试类,在测试类中进行以下步骤:

    ①第一步:加载配置文件,启动Spring容器

    ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");

    注意:ApplicationContext是一个接口,接口中定义了spring的API ClassPathXmlApplicationContext是接口的实现类

    后边括号里的是配置文件

    ②从spring容器中取出某个对象

    User user = ac.getBean("user",User.class);

    System.out.println(user);

    String name=user.getName();

    System.out.println(name);

    如果测试的时候能够正确输出,则说明spring容器创建对象成功

    三、Spring管理的对象的作用域

    由spring创建的对象默认是单例的(singleton)。但是,在实际的应用当中,我们可以通过scope属性来改变单例模式

    Scope=“prototype”时,多例

    例如:<!-- springg管理对象的作用域 -->

    <bean id="p" class="pojo.Person" scope="prototype"></bean>

    scope配置项有5个属性,用于描述不同的作用域。

    ① singleton【默认】

    使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

    ② prototype

    使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。

    ③ request

    该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。

    ④ session

    该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

    ⑤ global-session

    该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

    四、spring的依赖注入(名词DI:依赖注入)

    1、什么是依赖注入

    通过spring容器,使用一定的方式给对象的属性进行赋值

    2、依赖注入的两种方式

    ①set方法注入(前提是基类中要有set方法)

    • 通过Spring容器给属性赋值

    Person类中:

    public class Person {
        
        private Integer id;
        private String name;
        private String address;
    
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
    @Override
        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", address=" + address + ”]";
        }
    }

    applicationContext.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:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
    <bean id="p" class="pojo.Person">
        <property name="id" value="10"></property>
        <property name="name" value="张山峰"></property>
        <property name="address" value="江苏如皋"></property>
      </bean>
    </beans>

    测试类中:

    public class SpringTest {
        
        @Test
        public void test1() {
            
            ApplicationContext ac=new
                    ClassPathXmlApplicationContext("applicationContext.xml");
            
            Person p = ac.getBean("p",Person.class);
            
            System.out.println(p.toString());    
        }
    • 通过Spring容器给list集合赋值

    Person类中:

    public class User {
        private List list;
        
        @Override
        public String toString() {
            return "User [list=" + list + "]";
        }
        public List getList() {
            return list;
        }
        public void setList(List list) {
            this.list = list;
        }    
    }

    applicationContext.xml配置文件中;

         <bean id="p" class="pojo.Person">
            <!-- 这个给list集合注入值 -->
        <property name="list">
        <list>
        <value>看电影</value> 
        <value>游泳</value>
        <value>打游戏</value>
        </list>
        </property>
          </bean>    

    测试类中:

    @Test
    	public void test2() {
    		
    		ApplicationContext ac=new
    				ClassPathXmlApplicationContext("applicationContext.xml");
    		
    		Teacher t = ac.getBean("t",Teacher.class);
    		
    		System.out.println(t.toString());	
    	}
    

      

    • 通过Spring容器给map集合赋值

    <bean id="p" class="pojo.Person">
    <!-- 这个是给map集合注入值 -->
        <property name="map">
        <map>
        <entry key="数学" value="90"></entry>
        <entry key="语文" value="80"></entry>
        <entry key="英语" value="70"></entry>
        
        </map>
        </property>
    </bean>
    • 通过Spring容器给set集合赋值

    <bean id="p" class="pojo.Person">
         <!-- 这个是给set集合注入值 -->
        <property name="set">
        <set>
        <value>国庆节</value>
        <value>中秋节</value>
        <value>端午节</value>
        </set>
        
        </property>
        
        </bean>    
    • 将一个类的对象注入到另一个类中

     例如将Student的值注入到Person类中:

    首先要在Person类里边创建一个返回值为Student的属性,并创建get和set方法:

    public class Person {
       private Student ss;
       public Student getSs() {
            return ss;
        }
        public void setSs(Student ss) {
            this.ss = ss;
        }
      } 

    在applicationContext.xml中:

    <!-- 通过set方法将值注入到属性中 -->
        <bean id="p" class="pojo.Person">
        
        <!-- 将Student注入到Person类中         使用ref引用Student的id值 -->
        <property name="ss" ref="stu"></property>
    
    
               <!-- 这时student类 -->
        <bean id="stu" class="pojo.Student">
        <property name="id" value="20"></property>
        <property name="name" value="张无忌"></property>
        <property name="score" value="100"></property>
        
        </bean>

    最后在测试类里测试:

    ②有参数的构造器注入(要先在基类中生成构造器)

    在基类中:

    package pojo;
    
    public class Teacher {
        
        private Integer id;
        private String name;
        private String address;
        @Override
        public String toString() {
            return "Teacher [id=" + id + ", name=" + name + ", address=" + address + "]";
        }
        
        public Teacher(Integer id, String name, String address) {
            super();
            this.id = id;
            this.name = name;
            this.address = address;
        }
    }

    在applicationContext.xml测试类中:

    <!-- 第二种注入方式:构造器注入
        index 表示构造器中参数列表下表位置,从0开始
         -->
        <bean id="t" class="pojo.Teacher">
        <constructor-arg index="0" value="01"></constructor-arg>
        <constructor-arg index="1" value="智障"></constructor-arg>
        <constructor-arg index="2" value="四川"></constructor-arg>
        </bean>

    注意:index 表示构造器中参数列表下表位置,从0开始

  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number (考虑负数的情况)
    8. String to Integer (整数的溢出)
    7. Reverse Integer (整数的溢出)
    LeetCode Minimum Size Subarray Sum
    LeetCode Course Schedule II
    Linux 文件缓存 (一)
    LeetCode Tries Prefix Tree
    Linux : lsof 命令
    LeetCode Binary Tree Right Side View
  • 原文地址:https://www.cnblogs.com/bzbz/p/11580587.html
Copyright © 2011-2022 走看看