Spring介绍

Spring介绍

一: 首先让我们先来了解什么是Spring.

Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。

二: 使用Spring框架的好处是什么?

  1. Spring是一个轻量级框架。
  2. Spring通过控制反转,实现降低程序的耦合性,把创建对象的主动权交给Spring处理。
  3. Spring支持AOP界面编程,使得可以实现再不修改原来的代码的情况下扩展程序的功能,减少我们工作量。
  4. Spring 提供一个持续的事务管理接口,更好,更简单的管理事务处理。
  5. Spring更好的处理的程序的异常处理。

三:Spring的两大主要核心

3.1:IOC

什么是IOC?
  • IOC容器:意思是控制反转,依赖注入
  • 控制反转:我们之前创建对象,当类A需要调用另外类B的时候,需要再类A中去主动创建一个类B的对象,然后实现调用,使用Spring是将类A创建对象的主动权交给了SpringIOC容器来统一管理,把创建类B对象的事情交给SpringIOC容器,然后Spring使用工厂模式再把创建好的对象交给类A,这样可以实现降低之间的耦合性。
  • 依赖注入:实现类中属性值的注入。

3.2:AOP

  • 面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
  • 可以在一个具体的功能前后横切新功能,并且不需要去修改原来的代码。

四:Spring框架模块

在这里插入图片描述
Spring AOP
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web 模块
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring MVC 框架
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

五:Spring Bean的生命周期(从对象创建到对象销毁的过程)

(1):通过构造器创建bean实例
(2):为bean对象进行set属性赋值
把bean实例传递bean后置处理器的方法 postProcessBeforeInitialization
(3):调用bean并执行初始化方法
把bean实例传递bean后置处理器的方法postProcessAfterInitalization
(4):获取bean对象实例对象
(5):容器关闭时,调用bean销毁对象

六:代码实现对象的创建(XML)

步骤(注意点):
	1.Spring采用XML配置方式进行对象的创建和注入
	2.使用Maven引入对应Spring的依赖
  • 引入依赖
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
  • 创建Dog类
public class Dog {

    private Integer id;
    private String name;

	public Dog() {}

    public Dog(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    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;
    }
}
  • 创建XML配置文件 (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:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
">

</beans>
  • 使用XML配置文件创建对象
    使用bean标签指定具体包下的具体类,取id值
<!--创建Dog类的对象-->
    <bean id="dog" class="org.example.entity.Dog">
    </bean>

述

  • 创建测试类获取对应的对象
  //加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 通过 bean标签的id获取指定的类,返回值是Object类型,把Object类型转换成对应的类型
        Dog dog = (Dog)context.getBean("dog");
        System.out.println(dog);
  • 结果
    在这里插入图片描述

6.1:实现普通属性值的注入

  • 使用属性注入值,必须提供set方法
<!--创建Dog类的对象-->
    <bean id="dog" class="org.example.entity.Dog">
        <!-- 使用属性set方法-->
        <property name="id" value="1"/>
        <property name="name" value="张三"/>
        <!--使用构造器方法-->
        <constructor-arg name="id" value="2"/>
        <constructor-arg name="name" value="李四"/>
    </bean>

6.2:实现Map,set,数组,对象 等的值注入

  • 1.创建对象
public class Teacher {
    private Integer id;
    private String name;
public class Student {
    private String[] scores;
    private List<String> list;
    private Map<String,String> map;
    private Set<String> set;
    private List<Course> courseList;
    private Teacher teacher;
  • 2.xml编写
  <!--Teacher类对象的创建-->
    <bean id="teacher" class="com.xxx.xxx.collectiontype.Teacher">

    <bean id="stu" class="com.xxx.xxx.collectiontype.Student">
	 <!--teacher对象赋值-->
        <property name="teacher" ref="teacher"/>
<!--   数组赋值     -->
        <property name="scores">
            <array>
                <value>张三</value>
                <value>李四</value>
            </array>
        </property>
<!--   list集合赋值     -->
        <property name="list">
            <list>
                <value>Javalist集合练习题</value>
            </list>
        </property>
<!--   Map集合赋值     -->
        <property name="map">
            <map>
                <entry key="Java" value="java"></entry>
                <entry key="MYSQL" value="mysql"></entry>
            </map>
        </property>
<!--   set集合赋值     -->
        <property name="set">
            <set>
                <value>C++</value>
                <value>PHP</value>
            </set>
        </property>
<!--   List实现对象属性的注入 ,对象添加到list集合中    -->
        <property name="courseList">
            <list>
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
    </bean>

6.3在Spring里面,bean默认是单实例对象

   //加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 通过 bean标签的id获取指定的类,返回值是Object类型,把Object类型转换成对应的类型
        Dog dog = (Dog)context.getBean("dog");
        Dog dog1 = (Dog)context.getBean("dog");
        System.out.println(dog);
        System.out.println(dog1);

在这里插入图片描述

七:代码实现对象的创建(注解)

7.1:IOC操作Bean管理

	针对对象创建提供注解(根据分层来使用,使用在类上面)
			@Component
			@Service
			@Controller
			@Repository

7.2:基于注解方式实现属性注入

(1)@Autowired:根据属性类型进行自动装配
(2)@Qualifier:根据名称进行注入;这个@Qualifier注解的使用,和上面@Autowired一起使用
(3)@Resource:可以根据类型注入,可以根据名称注入
(4)@Value:注入普通类型属性

7.3: 代码实例

@Repository
public class UserDao {

    public void test(){
        System.out.println("UserDao");
    }

}
public class UserService {

    @Autowired
    private UserDao userDao;

    public void test(){
        System.out.println("UserService");
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}
    <!--开启扫描-->
    <context:component-scan base-package="org.example"/>

    <bean id="userService" class="org.example.service.UserService"></bean>
 UserService userService = (UserService) context.getBean("userService");
        userService.getUserDao().test();

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值