Spring概述总结

什么是Spring

Spring是一个轻量级的,非侵入式的IOC和AOP的一站式java后端开发框架,简化企业级开发。

什么是耦合

两个或两个以上对象存在依赖,当一方修改之后会影响另一方,那么就说这些对象间存在耦合。

Spring优点和缺点

优点:Spring是一个容器,可以将对象管理起来,让创建对象和使用对象分离,降低耦合度,使用AOP的思想使程序扩展功能更加方便,可以轻松集成其他框架,比如mybatis。

缺点:配置量比较大,有很多模板化配置,依赖的jar比较多,使用了大量反射机制,反射机制非常占用内存。

IOC和AOP

IOC(Inversion of Control):控制反转,如果要使用某个对象,直接从IOC容器中获取,不再由自己创建和配置。

AOP(Aspect Oriented Programming),面向切面编程,AOP将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

DI

DI(Dependency Injection),依赖注入,不是一种设计实现,而是一种具体的技术,在IOC容器运行期间,动态地将某个依赖对象注入到当前对象的技术就叫做依赖注入。

IOC VS DI

IOC是一种设计思想,而DI是一种具体的实现技术。但本质上都是为了降低耦合度。

Spring中注入对象的方式

三种注入方式

  • 变量注入 @Autowired
@Service 
 public class UserServiceImpl implements UserService{
 	 @Autowired
	 private UserMapper userMapper;
	 // ...
 }

优点:注入方式简洁,没有多余的代码
缺点:注入的对象不能用final对象修饰。可能导致循环依赖问题,并且在启动的时候不会报错,只有在真正使用bean时候才会报错。

  • 构造器注入:
 @Service 
 public class UserServiceImpl implements UserService{
 
	 private  final UserMapper userMapper;
	
	 @Autowired
	 public UserServiceIml(UserMapper userMapper){
	 		this.userMapper = userMapper
		 }
 }

优点:显示注明必须强制注入,防止发生空指针异常。注入的对象可以使用final修饰。可以避免循环依赖问题,如果存在循环依赖,项目启动就会报错,好找问题。
缺点:多个时,构造函数代码臃肿。

  • set方法注入:
 @Service 
 public class UserServiceImpl implements UserService{
 
	 private  final UserMapper userMapper;
	
	 @Autowired
	 public void setUserMapper(UserMapper userMapper){
	 		this.userMapper = userMapper
		 }
 }

优点:依赖注入中使用的依赖对象是可选的,可以为NULL。可以在类构造完成后重新注入。
缺点:注入对象不能用final修饰。

自动注入的注解有哪些注解

  • @Autowired:可以为属性自动注入值,可以写在属性上或setter方法上,写在字段上的话就不写在setter方法上。默认值不能为空,如果允许为空@Autowired(required = false) 没啥意义,下面业务也会报错。
    可以通过属性类型去Spring容器中查找值
    byType 按类型UserDao自动注入,该注解默认使用按类型自动装配 Bean 的方式。
    byName@Qualifier(value='' userDao") 按名字去找
	@Repository(value = "userDao") // 可以不写value DAO层建议Repository 
	public class UserDao{
	   public void insertUser(User user) {
	   
	   }
	}

	@Service(value = "userService")
	public class UserService {
	
	       /* 
	        @Qualifier(value = "userDao")
	        @Resource(name = "userDao")*/
	        @Autowired
	        UserDao userDao;
	        public void saveUser(User user){
	                userDao.insertUser(user);
	        }
	}

  • @Resource@Resource(name = "userDao") jdk提供的,可以按名字和类型,默认名字,没有找到再按类型

Spring 中的 bean 和 new 的对象有什么区别

首先new对象,创建对象,需要初始化,先加载类文件,其次是对象所需要的内存,然后静态代码块会被调用,最后是构造方法。
Spring框架负责bean的生命周期管理,当bean不再需要时,spring会自动进行垃圾回收。

AOP 中的术语有哪些,通知有哪些

  • 连接点:类中可以被增强的方法,称为连接点
  • 切入点:实际被增强了的方法
  • 通知:方法中被增强的功能。
  • 切面:把通知添加到切入点的过程称为切面
  • 目标:代理的目标对象(连接点,切入点所在的类),真正做这件事的类
  • 代理:向目标对象应用通知时创建的代理对象。

通知分为

  • 前置通知:在目标方法执行前的通知。
  • 后置通知:在方法执行后的通知,无论方法是否抛出异常。
  • 异常通知:在目标方法抛出异常时执行的通知。
  • 最终通知:在目标方法成功执行并返回结果之后执行的通知。
  • 环绕通知:可以在目标方法前后自定义逻辑,可以控制目标方法的执行流程。

Spring 实现 AOP 有哪几种方式

  • 基于xml配置
  • 注解实现

谈谈 Spring 事务管理,实现方式有几种,原理是什么?

事务是对数据库若干操作组成的一个单元。由于数据操作在顺序执行的时候,任何一步都有可能发生异常,后面的操作无法完成,之前的操作数据并不可靠,所以要进行回退。

事务的作用就是为了保证用户的每一个操作都是可靠的,只要发生异常就回到开始未操作的状态。这些操作要么都完成,要么都取消,从而保证数据一致性的要求。

  • 基于xml配置实现
 <!--配置spring 事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
    </bean>
  • 注解实现
<!-- 开启注解事务管理器 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

声明式事务哪些场景下会失效

  • @Transactional作用在非public权限方法上
  • 异常被trycatch处理了
  • 默认情况下出现编译异常是失效的 修改配置 @Transactional(rollbackFor = Exception.class)
  • 数据库引擎不支持事务
  • 同一个类中,使用非代理对象调用一个有事务的方法,导致事务错误

SpringWEB(springMVC)运行流程

SpringWEB(springMVC)运行流程详解

spring 和 springboot 的关系区别

关系:SpringBoot是Spring的一个扩展,基于Spring的框架,旨在简化Spring程序的应用开发和部署。

区别:

  • Spring配置过程相对复杂,需要手动配置servlet,映射等。SpringBoot的配置更为简单,采用约定大于配置的原则,提供了Spring运行的默认配置,大大简化了配置过程
  • Spring的应用程序部署相对复杂。SpringBoot更简单,将很多模板化配置省略,简化应用的初始搭建及开发过程。
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值