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 常见属性
属性名 | 说明 |
---|---|
id | Bean实例在Spring容器中的唯一标识,通过id值获取bean |
class | Bean的类型, spring创建的就是该类的对象 |
name | Bean的名称,可以通过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概念简述的主要内容,如果未能解决你的问题,请参考以下文章
java web(ssm)简答题 考前总结——不详细,但好背
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段