spring概念简述

Posted @红茶不加糖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring概念简述相关的知识,希望对你有一定的参考价值。

1 spring简介

1.1 什么是框架

框架是一个封装了很多功能和模块的程序的半成品。

可以理解为是一个由很多工具类组合而成的一个工具包。

框架可以提高我们的开发效率

1.2 spring是什么

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架。是Java开发的灵魂框架。

Spring有两大内核:

IOC(Inverse Of Control:控制反转)

AOP(Aspect Oriented Programming:面向切面编程)

1.3 spring的主要功能

IOC: 控制反转,其实就是把对象的创建权,交给spring,由Spring负责给我们创建对象

DI: 依赖注入,其实就是给对象的成员变量赋值。(di隶属于ioc)

AOP: 面向切面编程,底层就是动态代理

事务: Spring提供了声明式事务,也就是说,我们可以通过配置的方式来添加事务。

2 一个简单案例

2.1 Spring程序开发步骤

①导入 Spring 开发的基本包坐标(5.1.9.release)

②创建Spring核心配置文件

③在 Spring 配置文件中配置要创建的对象

④通过spring获取资源(获取创建的对象)

2.2 案例实现

① 导入坐标

<!--spring核心-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>

② 创建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控制的资源(让spring帮忙创建该类的对象)-->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>
    
</beans>

④ 通过spring获取资源(获取创建的对象)

public class UserApp 
    public static void main(String[] args) 
        //1.加载配置文件
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.获取资源
        UserService userService = (UserService) ctx.getBean("userService");
        //3.调用方法
        userService.save();
    

3 IOC配置-XML格式

3.1 Bean标签基本配置

作用:定义spring中的资源,受此标签定义的资源将受到spring控制

格式:

<beans>
	<bean 属性名="属性值" ></bean>
</beans>

3.2 常见属性

属性名说明
idBean实例在Spring容器中的唯一标识,通过id值获取bean
classBean的类型, spring创建的就是该类的对象
nameBean的名称,可以通过name值获取bean,用于多人配合时给bean起别名

3.3 其他属性

3.3.1 scope

  • 格式:

    <bean scope="singleton"></bean>
    
  • 取值:

    • singleton:设定创建出的对象保存在spring容器中,是一个单例的对象,
    • prototype:设定创建出的对象保存在spring容器中,是一个多例的对象

3.3.2 生命周期

  • 格式:

    <bean init-method="bean初始化时执行的方法" destroy-method="bean销毁时执行的方法"></bean>
    
  • 结论:

    • 当scope=“singleton”时,对象会在配置文件被加载的时候,直接创建.
  • 当scope=“prototype”时,只有在获取对象的时候,才会创建对象

3.4 对象创建方式

1) 使用无参构造方法实例化

默认调用无参构造方法创建对象,如果bean中没有默认无参构造函数,将会创建失败

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>

2) 工厂静态方法实例化

工厂静态方法实例化, 指的是在创建对象的时候,是通过调用某个类的静态方法才能创建对象.

例如:

​ LocalDate now = LocalDate.now();

<!-- LocalDate now = LocalDate.now();  -->
<bean id="now" class="java.time.LocalDate" factory-method="now"/>

3) 工厂实例方法实例化

工厂实例方法实例化, 指的是在创建对象的时候, 需要通过其他类的对象才能创建对象.

例如:

​ LocalDate now = LocalDate.now();

​ DayOfWeek dayOfWeek = now.getDayOfWeek();

<!-- LocalDate now = LocalDate.now();  -->
<bean id="now" class="java.time.LocalDate" factory-method="now"/>

<!-- DayOfWeek dayOfWeek = now.getDayOfWeek();  -->
<bean id="dayOfWeek" factory-bean="now" factory-method="getDayOfWeek"/>

4. 依赖注入-DI

4.1 概述

依赖注入(Dependency Injection):是SpringIOC的具体体现,简单来说,就是给对象的属性赋值

4.2 Bean的依赖注入方式

4.2.1 Set方法赋值

①在UserServiceImpl中添加setUserDao方法

public class UserServiceImpl implements UserService 
    private UserDao userDao;
 
    public void setUserDao(UserDao userDao) 
        this.userDao = userDao;  
     
    
    @Override    
    public void save()       
   		 userDao.save();
	

②配置Spring容器调用set方法进行注入

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
    <!-- 使用setUserDao方法,把userDao对象,注入userService中 -->
	<property name="userDao" ref="userDao"/>
</bean>

4.2.2 构造方法赋值

①在类中提供有参构造

public class UserServiceImpl implements UserService 	
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao) 
        this.userDao = userDao;
    

    @Override
    public void save() 
        userDao.save();
    
 

②配置Spring容器调用有参构造时进行注入

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
    <!-- 使用构造方法,把userDao对象,注入userService中 -->
    <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>

4.3 集合类型数据注入

1) list

<property name="al">
    <list>
        <value>itheima</value>
        <value>66666</value>
        <!--如果集合元素是对象,则可以注入对象(直接创建新对象)-->
        <bean class="com.itheima.domain.User"/>
        <!--如果集合元素是对象,则可以注入对象(引入已经创建的对象)-->
        <ref bean="u1"/>
    </list>
</property>

2) rops

<property name="properties">
    <props>
        <prop key="name">itheima666</prop>
        <prop key="value">666666</prop>
    </props>
</property>

3) array

<property name="arr">
    <array>
        <value>123456</value>
        <value>66666</value>
    </array>
</property>

4) set

 <property name="hs">
     <set>
         <value>itheima</value>
         <value>66666</value>
     </set>
</property>

5) map

<property name="hm">
    <map>
        <entry key="name" value="itheima66666"/>
        <entry key="value" value="6666666666"/>
    </map>
</property>

以上是关于spring概念简述的主要内容,如果未能解决你的问题,请参考以下文章

spring概念简述

spring概念简述

java web(ssm)简答题 考前总结——不详细,但好背

不懂控制反转么?大白话讲清楚spring中这些晦涩的概念

请简述啥是CSS3 Spring?如何使用Spring

【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程