Spring基础知识

Spring
  • Spring优点

    • 轻量级框架(不具有侵入性)
    • IoC控制反转
    • AOP面向切面编程
    • 对事务的支持
    • 对框架的支持
  • Spring框架内容

  • IoC

    • Inverse of Control — 控制反转
    • 对象原本由程序创建 -> 由程序接收对象
    • 更加侧重于业务代码的实现
    • 实现了service层和dao层的分离 -> 解耦(使得dao层和service层没有直接依赖关系,dao层的修改不需要修改service层)
  • spring使用步骤

    • 导入相关jar包(需要导入commons-logging-x.x.x.jar)
    • 编写spring配置文件,名称可以自定义
  • spring示例

    • bean类

      public class Hello {
          private String name;
          public void setName(String name) {
              this.name = name;
          }
          public void show() {
              System.out.println("hello, " + name);
          }
      }
      
    • beans.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.eric.bean.Hello">
              <property name="name" value="char"></property>
          </bean>
      </beans>
    • 测试代码

      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();
              //输出结果:hello, char
          }
      }
    • hello对象的创建: 对象是由spring容器创建的

    • hello对象的属性: xml配置文件中有属性值,由spring容器为对象设置
  • 整个过程即控制反转IoC


IoC思想及通过IoC创建对象
  • 控制反转IoC

    • 是一种编程思想。由主动的编程转变为被动的接收
    • ioc的是有ioc容器来实现的,ioc容器即BeanFactory
    • 控制:
      • 指谁来控制对象的创建
      • 传统的程序由程序本身控制的
      • 使用spring后,由spring创建对象
    • 反转:
      • 控制权限的转移
      • 指程序本身不去创建对象,而变为被动的接收对象
    • 总结: 以往的程序中,对象由程序本身创建;使用spring后,程序变为被动的接收spring创建好的对象
    • 依赖注入
      • 依赖注入和控制反转时同一个概念,只是描述的角度不同
  • 使用ioc来创建对象的方式

    • 通过无参构造方法创建

      • java代码

        public class User {
            private String name;
            public User() {
                System.out.println("无参构造方法");
            }
            public void setName(String name) {
                this.name = name;
            }
            public void show() {
                System.out.println("name = " + name);
            }
        }
      • 配置文件

        <bean id="user" class="com.eric.vo.User">
            <property name="name" value="char"></property>
        </bean>
    • 通过有参的构造方法创建

      • java代码

        public class User2 {
            private String name;
            public User2(String name) {
                super();
                this.name = name;
                System.out.println("有参构造方法");
            }
            public void show() {
                System.out.println("name = " + name);
            }
        }
      • 配置文件

        <bean id="user2" class="com.eric.vo.User2">
            <constructor-arg></constructor-arg>
            <!-- 可按照几下三种方式设置参数 -->
        </bean>
        • 根据参数下标index,配置参数

          <constructor-arg index="0" value="eric"></constructor-arg>
        • 根据参数名称设置

          <!-- name的值指属性名称 -->
          <constructor-arg name="name" value="chenyu"></constructor-arg>
        • 根据参数的类型来设置

          <constructor-arg type="java.lang.String" value="char"></constructor-arg>
    • 通过工厂方法来创建对象

      • 静态工厂

        • java代码提供有参构造方法
        • 工厂代码

          public class UserFactory {
              public static User3 newInstance(String name) {
                  return new User3(name);
              }
          }
        • 配置文件

          <!-- class是工厂类,method是创建对象的方法 -->
          <bean id="user3" class="com.eric.factory.UserFactory" factory-method="newInstance">
              <constructor-arg index="0" value="charFactory"></constructor-arg>
          </bean>
      • 动态工厂

        • java代码提供有参构造方法
        • 工厂代码

          public class UserDynamicFactory {
              public User3 newInstance(String name) {
                  return new User3(name);
              }
          }
        • 配置文件

          <bean id="userDynamicFactory" class="com.eric.factory.UserDynamicFactory"/>
          <bean id="user4" factory-bean="userDynamicFactory" factory-method="newInstance">
              <constructor-arg index="0" value="charDynamic"></constructor-arg>
          </bean>

配置文件概览
  • 配置文件
    • 别名配置<alias>
      • <alias name="user" alias="userx"/>
      • name属性为bean的id,alias为别名
    • 配置<bean>
      • id是bean的标识符,需要唯一。如果没有配置id,默认name作为标识符
      • 如果idname均配置了,那么name将作为别名,别名可以设置多个
      • class是bean的完全限定名 = 包名 + 类名
      • 如果不配置idname,可以通过ApplicationContext.getBean(Class)获取对象
      • <scope>定义bean的作用域
        • singleton: 整个容器只有一个对象实例(默认)
        • prototype: 每次获取bean都产生一个新的对象
        • request: 每次请求时创建一个新的对象
        • session: 在会话的范围内是一个对象
    • 导入配置<import>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值