Spring - 框架相关内容1

目录

一、概念

二、Spring框架的核心作用

三、第一个环境搭建

四、Spring的两大核心编程思想

五、依赖注入方式

1.SET方式注入

2.自动注入

3.构造方式注入(了解)

4.和SET方式注入的本质区别(了解)

六、Spring工厂的特性


一、概念

Spring 框架是一个集众多设计模式于一身的开源的轻量级项目管理框架。

Spring框架致力于JAVAEE 轻量级解决方案,提供一个以简单的、统一的、高效的方式构造整个应用,并且可以将单层框架(MVC编程思想:model模型(Dao、Service)、view视图(view)、controller控制(action))以最佳的组合糅合在一起建立一个连贯的体系。

二、Spring框架的核心作用

Spring框架用来管理、创建、使用、销毁项目中的组件,由于Spring框架生产和保存项目中组件对象,可称Spring是一个工厂、容器

组件:项目中的service、dao、action(controller) 都是项目中的组件,spring框架通常不管理对entity对象的创建(entity一般自己创建)

三、第一个环境搭建

1.引入依赖

<dependency><!--spring核心-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--spring容器支持-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--spring容器支持-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--主要实现ioc模块-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--对web环境的支持和工具-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--aop相关-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--aop相关-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--aop相关-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<dependency><!--数据库资源管理和错误处理-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>

2.引入配置文件(任意名字、任意位置),resources中的spring.xml(推荐放在resources中,但对名字无任何规范要求)

<?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">

   
</beans>

3.组件接口和实现

package com.baizhi.dao;

public interface UserDao {
    void save(String name);
}

package com.baizhi.dao;

public class UserDaoImpl implements UserDao{

    @Override
    public void save(String name) {
        System.out.println("姓名:" + name);
    }
}

4.通过工厂管理

5.启动工厂测试

//通过配置文件启动工厂
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");

//通过getBean("bean的名字")获得工厂创建的对象
UserDao userDao = (UserDao) ctx.getBean("userDao");
userDao.save("张三");

四、Spring的两大核心编程思想

  1. IOC (Inversion of Control,控制反转)

获得依赖对象的过程由自身管理(自己new创建对象)变为了通过容器(Spring)进行DI(dependency injection ,依赖注入)。

        2.AOP(Aspect Oriented Programming,面向切面的编程)

将额外功能(加在一系列操作中的冗余代码)都放到通知中,然后和切入点组成切面

一个切面指的就是一个(动态)代理对象。

五、依赖注入方式

1.SET方式注入

类里提供成员变量和对应的set方法(get方法可以不提供)

在配置文件需要被注入的类的bean标签的标签体里按需求添加对应property标签:

2.自动注入

自动注入使用SET方式注入组件对象。类里提供成员变量和对应set方法(get方法可以不提供)

<!--被注入的对象上加入 autowire-->
<!--
    byType,根据类型注入,要求同一个工厂里不能有同类型的bean
    byName,要求变量名必须一致
-->
<bean class="com.baizhi.service.CityServiceImpl" id="cityService" autowire="byType"></bean>

3.构造方式注入(了解)

类里提供成员变量(同时提供有参、无参)

public CityServiceImpl() {
}

public CityServiceImpl(Integer age, Date bir, CityDao cd) {
    this.age = age;
    this.bir = bir;
    this.cd = cd;
}

在被注入的类的bean里写:

<!--
    对应构造函数的三个参数
    index:参数的下标,下标从0开始
    name:参数的名字
    value或ref:注入的内容
-->
<constructor-arg index="0" name="age" value="15"/>
<constructor-arg index="1" name="bir" value="2022/01/11 12:30:05"/>
<constructor-arg index="2" name="cd" ref="cityDao"/>

4.和SET方式注入的本质区别(了解)

  • set : 先创建对象,调用无参构造,再通过set方法给成员变量赋值

  • 构造方法注入: 在创建对象的同时给成员变量赋值,在设计上是强制给成员变量赋值。

六、Spring工厂的特性

  1. 默认在工厂中管理的对象都是单例的,全局唯一,只创建一次

    可配置为原型(可以认为是“多例”)模式,常用于Struts2的Action(每次请求都需要创建)

     <bean class="xxx.XxxAction" id="xxxAction" scope="prototype"></bean>
  2. Spring工厂原理(了解)。

    使用反射来创建对象。

  3. UserDAOImpl userDAO = (UserDAOImpl) Class.forName("com.baizhi.dao.UserDAOImpl").newInstance();
    System.out.println(userDAO);
  4. bean的生命周期。

    • 对象创建:随着工厂启动,创建单例bean。原型bean在使用时创建。

    • 对象销毁:随着工厂关闭,销毁单例bean。原型bean不会随着工厂关闭销毁。(了解:DisposableBean.destroy)

  5. 使用bean工厂创建对象的好处

    • 使用配置文件管理java类,在生产环境中更换类的实现时不需要重新部署,修改配置重启即可(如果用了Spring注解式开发,就没有这一条了)。

    • 默认只创建一个对象(单例模式),节省创建对象的时间和内存空间。

    • 通过依赖注入建立了类与类之间的关系(使Java对象之间关系更为清晰,方便了维护与管理)。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值