美文网首页
Spring学习笔记

Spring学习笔记

作者: 西门无鞋 | 来源:发表于2018-04-25 16:58 被阅读0次

    1. Spring简介

    1.1 Spring的优点

    • 轻量级框架
    • IOC容器:控制反转
    • AOP切面:面向切面编程
    • 对事务的支持
    • 对框架的支持

    1.2 Spring主要内容

    Spring主要内容

    1.3 IOC:inversion of control 控制反转

    • 对象由原来的程序本身创建变为了程序接收对象。
    • 程序员主要精力集中于业务实现
    • 实现了service层和dao层的解耦工作:service层和dao层没有直接以来关系,如果dao层的实现发生改变,应用本身不变。

    2.Spring入门和IOC

    2.1 Hello,Spring

    • 导入相关jar包


      相关jar包
    • 编写spring配置文件(beam.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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!-- bean就是java对象 由spring容器来创建和管理 -->
        <bean name="hello" class="com.yxxy.bean.Hello">
            <property name="name" value="spring"></property>
        </bean>
    </beans>
    
    • 编写Hello.java
    public class Hello {
        private String name;
        
        public void setName(String name) {
            this.name = name;
        }
        
        public void show() {
            System.out.println("hello" + name);
        }
    }
    
    • 测试
    public class Test {
        
        public static void main(String[] args) {
            // 解析beans.xml文件 生成管理相应的bean对象
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            Hello hello = (Hello) context.getBean("hello");
            hello.show();
        }
        
    }
    
    • 总结:上述的内容就叫做控制反转
      ①控制的内容:指谁来控制对象的创建,传统应用的对象创建是程序本身,使用sping后,sping可以控制对象的创建。
      ②反转:由主动创建对象变为被动接收。
      ③控制反转——依赖注入。
      ④IOC的实现是由ioc容器实现的:BeanFactory。

    2.2 IOC创建对象的3中方式

    • 通过无参构造方法创建
      User.java
    public class User {
        private String name;
        public User() {
            System.out.println("User的无参构造方法!");
        }
        public void show() {
            System.out.println("name=" + name);
        }
    }
    

    bean.xml

        <bean name="user" class="com.yxxy.vo.User">
            <property name="name" value="张三"></property>
        </bean>
    
    • 通过有参构造方法创建
      User.java
    public class User {
        private String name;
        public User(String name) {
            System.out.println("User的有参构造方法!");
            this.name = name;
        }
        public void show() {
            System.out.println("name=" + name);
        }
    }
    

    bean.xml

    <!--根据参数下标来设置-->
    <bean name="user" class="com.yxxy.vo.User">
        <constructor-arg index="0" value="李四"></constructor-arg>
    </bean>
    
    <!--根据参数名称来设置-->
    <bean name="user" class="com.yxxy.vo.User">
        <constructor-arg name="name" value="王五"></constructor-arg>
    </bean>
    
    <!--根据参数类型来设置-->
    <bean name="user" class="com.yxxy.vo.User">
        <constructor-arg type="java.lang.String" value="Dylan"></constructor-arg>
    </bean>
    
    • 通过工厂方法来创建
    • 静态工厂对象
    public class UserStaticFactory {    
        public static User newInstance(String name) {
            return new User(name);
        }   
    }
    

    bean.xml

    <bean id="user" class="com.yxxy.factory.UserStaticFactory" factory-method="newInstance">
        <constructor-arg index="0" value="张三"></constructor-arg>
    </bean>
    
    • 动态工厂对象
    public class UserDynamicFactory {
        public User newInstance(String name) {
            return new User(name);
        }   
    }
    
    • Beans.xml
    <!--需要定义一个工厂的bean-->
    <bean id="userDynamicFactory" class="com.yxxy.factory.UserDynamicFactory"></bean>
    <!--需要使用factorybean,然后再指定工厂方法-->
    <bean id="user" factory-bean="userDynamicFactory" factory-method="newInstance">
        <constructor-arg index="0" value="张三"></constructor-arg>
    </bean>
    

    3. Spring的配置文件详解

    3.1 alias别名

    alias:为bean设置别名,bean可以设置多个别名

    <!-- 设置别名 单个设置 -->
    <alias name="user" alias="u1"/>
    <!-- 设置多个别名 -->
    <bean id="user" name="u2,u3 u4;u5" class="com.yxxy.vo.User">
        <property name="name" value="张三"></property>
    </bean>
    

    3.2 bean的配置

        <!-- 
            id是bean的标识符要唯一,如果没有配置id,name默认是标识符
            如果配置了id,又配置了name,那么name是别名
            name可以设置多个别名,分隔符可以是空格逗号分号
            class是bean的全限定名=包名+类名
            如果不配置id和name,可以根据Class.class获取对象
         -->
        <bean class="com.yxxy.vo.User">
            <property name="name" value="张三"></property>
        </bean>
    

    3.3 团队协作开发

     <import resource="config/spring/entity.xml"/>
    

    4. 依赖注入

    4.1 依赖注入-dependency injection

    依赖:指bean对象创建依赖于容器,bean对象的依赖资源。
    注入:只bean对象的依赖资源由容器来设置和装配。

    4.2 Spring注入:构造器注入

    参见ioc创建对象的笔记

    4.3 Spring注入:Setter注入

    • 常量注入
    <bean id="user" class="com.yxxy.vo.User">
        <property name="name" value="张三"></property>
    </bean>
    
    • bean注入
    <!-- bean注入 -->
    <property name="address" ref="addr"></property>
    
    • 数组注入
    <!-- 数组注入 -->
    <property name="books">
        <array>
            <value>红楼梦</value>
            <value>西游记</value>
            <value>三国演义</value>
            <value>水浒传</value>
        </array>
    </property>
    
    • list注入
    <!-- list注入 -->
    <property name="hobbies">
        <list>
            <value>足球</value>
            <value>篮球</value>
        </list>
    </property>
    
    • map注入
    <!-- map注入 -->
    <property name="cards">
      <map>
        <entry key="中国银行" value="123456"></entry>
        <entry>
          <key><value>建设银行</value></key>
          <value>654321</value>
        </entry>
      </map>
    </property>
    
    • set注入
    <!-- set注入 -->
    <property name="games">
      <set>
        value>王者荣耀</value>
        <value>炉石传说</value>
        <value>LOL</value>
      </set>
    </property>
    
    • null注入
    <!-- null注入 -->
    <property name="salary">
      <null/>
    </property>
    
    • Properties注入
    <!-- Properties注入 -->
    <property name="info">
      <props>
        <prop key="学号">20171120001</prop>
        <prop key="sex">男</prop>
      </props>
    </property>
    
    • p命名空间注入
    <!-- p命名空间实际就是set注入 -->
    <bean id="studentp" class="com.yxxy.vo.Student" p:name="张三" p:age="20"></bean>
    
    • c命名空间注入
    <!-- c命名空间实际就是构造器注入 -->
    <bean id="studentc" class="com.yxxy.vo.Student" c:name="李四" c:age="22"></bean>
    
    

    相关文章

      网友评论

          本文标题:Spring学习笔记

          本文链接:https://www.haomeiwen.com/subject/mkdylftx.html