Spring框架学习记录——基础简介和入门

一、Spring简介

Spring是分层的JavaSE/EE应用full-stack轻量级开源框架

  • 框架:经过验证的,具有一定功能的,半成品软件;

    • 框架作用:

      • 提高开发效率

      • 增强可重用性

      • 提供编写规范

      • 节约维护成本

      • 解耦底层实现原理

二、Spring入门

总结一下主要的几个步骤吧

  • 导入依赖的坐标,比如Spring的坐标,其他比如数据库、单位测试等等(坐标来自MAVEN概念,得先看下MAVEN相关知识再看Spring)
  • 编写业务层与表现层接口与实现类
  • 在Spring的配置文件中配置bean(配置文件一般命名为applicationContext.xml),将实现类添加为Spring可以控制的资源(或者说Spring可以直接操作该实现类),举个栗子~
<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 1.创建spring控制的资源-->
    <bean id="userService" class="com.Yuansir.service.impl.UserServiceImpl"/>
</beans>
  • 在相关表现层加载该配置文件,获取Spring或控制的资源,调用里面的资源(方法);
   //2.加载配置文件的过程
   ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
   //3.获取资源的过程
        UserService userService = (UserService) ctx.getBean("userService");
        userService.save();

当然上述步骤只是一个极简单的例子,实际开发过程中用到的配置可能比这个要多得多,但是里面的内容思想步骤差不多也就是这样;

二、IoC配置

IoC:控制翻转,Spring反向控制应用程序所需要使用的外部资源;

1.bean标签
  • 用来定义Spring中的资源,换句话说就是凡是在bean中定义过的,都可以被Spring视为资源,都可以被调用,这是使用Spring的前提;
  • 主要的几个属性
    • id:bean的名称,要确保唯一性,通常用实现类的上级接口来命名;
    • class:bean的类型;一般就是指向id中的接口的实现类路径;
    • name:和id作用一样,类似起别名,多用于团队开发中;实际用的不多;
    • scope:用于控制bean中创建的对象是否是单例的,取值有两个,singleton和prototype,默认为singleton,bean中需要有复用的资源时,可以用一下;
    • init-method,destroy-method:用于控制bean对象在初始化或销毁时完成的工作
      • 当scope=“singleton”时,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次
      • 当scope=“prototype”时,spring容器要创建同一类型的多个对象,init方法在每个对象创建时均执行一次
      • 当scope=“singleton”时,关闭容器会导致bean实例的销毁,调用destroy方法一次
      • 当scope=“prototype”时,对象的销毁由垃圾回收机制gc()控制,destroy方法将不会被执行
2.DI

依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入;

IoC与DI的关系:IoC与DI是同一件事站在不同角度看待问题

3.set注入
  • 先用自己的表述来总结一下过程步骤:
  • 业务层与其它层(这里比如说是数据持久层Dao)交互情况下;
    • 首先编写持久层接口和接口实现类;
    • 其次在业务层接口实现类中定义所需注入的私有变量,该变量名可以与持久层接口名保持一致;
    • 比如:private UserDao userDao
    • 然后生成该变量的set方法;
    • 然后再spring配置文件中(applicationContext.xml)的bean中声明资源;
<!--2.将要注入的资源声明为bean-->
<bean id ="userDao"  class = "com.Yuansir.dao.impl.UserDaoImpl"/>
<!--3.将要注入的资源声明为bean-->
<bean id ="userService"  class = "com.Yuansir.service.impl.userServiceImpl">
	<!--name:要注入的变量名,一般就是set方法生成的变量名,只截取set后面的字符;
		ref:引用类型的变量,也就是要声明注入的bean的id (第2步中的id);
		value:非引用类型的变量,一般就是常量,要写明具体的值;
	-->
    <property name = "userDao" ref = "userDao"
</bean>
  • 最后就可以在业务层去调用数据层中定义的接口实现类;
4.读取外部properties文件
  • Spring提供了读取外部properties文件的机制,使用读取到的数据为bean的属性赋值
  • 操作步骤
    • 准备外部properties文件
    • 开启context命名空间支持
xmlns:context="http://www.springframework.org/schema/context"
  • ​ 加载指定的properties文件
<context:property-placeholder location="classpath:filename.properties">
  • ​ 使用加载的数据
<property name="propertyName" value="${propertiesName}"/>
  • ​ 注意:如果需要加载所有的properties文件,可以使用*.properties表示加载所有的properties文件;
    • 注意:name中使用的是在实现类中定义的变量名;
    • 注意:读取数据使用**${propertiesName}格式进行,其中propertiesName**指properties文件中的属性名;
5.第三方资源配置
  • 阿里数据源方案Druid

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/spring_ioc"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    

调用第三方数据

public  class  UserAPP{

	public static void main (String [] args)
    {
        ApplicationContext   ctx  = new  ClassPathApplicationContext("applicationContext.xml")
        DruidDataSource  dataSource = new (DruidDataSource) ctx.getBean("dataSource");
        //打印一下Druid的对象,看是否可以调用
        System.out.println(dataSource);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明的墨菲特i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值