首页 > 其他分享 >Spring框架

Spring框架

时间:2023-07-20 17:35:18浏览次数:25  
标签:事务 框架 Spring jar AOP 引入 注解

day01-下载,概述.监听器

Spring4学习路线

第一天:Spring的概述,SpringIOC入门(XML),Spring的Bean管理,Spring属性注入

第二天:Spring的IOC的注解方式,Spring的AOP开发(XML)

第三天:Spring的AOP的注解开发,Spring的声明式事务,jdbcTemplate

第四天:SSH的整合,HibernateTemplate的使用,OpenSessionInViewFilter的使用

Spring的概述

什么是Spring?

Spring叫做EE开发的一站式框架。

  一站式框架:有EE开发的每一层解决方案。

    WEB层:SpringMVC

     Service:Spring的Bean管理,Spring声明式事务

    DAO层:Spring的jdbc模板,Spring的ORM模板

Spring优点:

  方便解耦合:IOC

  AOP的开发:对程序进行扩展

  轻量级框架

  方便与其他框架整合

Spring的版本

Spring3.x和Spring4.x

Spring的入门(IOC)

1.什么是IOC?

控制反转(Inversion of Control)

  控制反转:将对象的创建权反转给(交给)Spring。

2.下载Spring的开发包

官网:http://spring.io/

3.解压Spring的开发包

docs:Spring的开发规范和API

libs:Spring的开发的jar和源码

schema:Spring的配置文件的约束

4.创建web项目,引入jar包 (4个基本jar包和2个日志jar包)

5.创建接口和类

问题:

  如果底层的实现切换了,需要修改源代码,能不能不修改程序源代码对程序进行扩展?

 6.将接口和实现类交给Spring管理   

在spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html(获取约束)

7.编写测试类 

IOC和DI

IOC:控制反转,将对象的创建权反转给了spring。

  DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。

<!--Spring的入门的配置-->
<bean id="userDAO" class="com.itheima.spring.demo1.UserDAOImpl">
  <property name="name" value="张三"/>
</bean>

  

面向对象的时候

  依赖:

  Class A{

  }

  Class B{

    public void xxx(A a){}

  }

  继承:is a

  聚合:has a

Spring的工厂类

 ApplicationContext继承了BeanFactory

1.BeanFactory:老版本的工厂类

  BeanFactory:调用getBean的时候,才会生成类的实例。

2.ApplicationContext:新版本的工厂类

  ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。

  ApplicationContext有两个实现类:

    ClassPathXmlApplicationContext:加载类路径下(src下)的配置文件

    FileSystemXmlApplicationContext:加载文件系统下的配置文件(本地磁盘)

XML的本地提示的配置

 Bean的相关的配置

1.<bean> 标签的id和name的配置

id:使用了约束中的唯一约束。里面不能出现特殊字符的。

name:没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现)。里面可以出现特殊字符。

2.Bean的生命周期的配置(了解)

init-method:Bean被初始化的时候执行的方法

destroy-method:Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭。否则多例的话不知道具体要销毁哪一个对象)

3.Bean的作用范围的配置(重点)

scope:Bean的作用范围

  singleton:默认的,Spring会采用单例模式创建这个对象。(单例:不管有多少程序调用,它只会被new一次,每次new的都是同一个对象的实例)

  prototype:多例模式。(用一次就new一个)(Struts2和Spring整合的时候一定会用到)

  request:应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中

  session:应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中

  globalsession:应用在web项目中,必须在porlet环境下使用(porlet环境指的是在一个地方存入数据以后,在它的子系统就不需要登录了,如qq登录后跳转至qq空间无需重新登录)。但是如果没有这种环境,相当于session。  

Spring的Bean的实例化方式(了解)

Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式:

1.无参构造方式的方式(默认)

public class Bean1{
    public Bean1(){
    super();
    System.out.println("Bean1的无参的构造方法执行了。。。");
  } }

 编写配置:

<!--无参数构造方法-->
<bean id="bean1" class="com.itheima.spring.demo3.Bean1"></bean>

2.静态工厂实例化的方式 

编写Bean2的静态工厂

public class Bean2Factory{
  public static Bean2 createBean2(){
    System.out.println("Bean2Factory中方法执行了。。。");
    return new Bean2();
  } }

配置 

<!--静态工厂实例化-->
<bean id="bean2" class="com.itheima.spring.demo3.Bean2Factory" factory-method="createBean2">

3.实例工厂实例化的方式

Bean3的实例工厂

public class Bean3Factory{
  public Bean3 createBean3(){
    System.out.printlin("Bean3的实例工厂执行了。。。");
    return new Bean3();
  } }

 配置

<!--实例工厂实例化-->
<bean id="bean3Factory" class="com.itheima.spring.demo3.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"></bean>

Spring的属性注入(Spring2.5以后版本)

1. 构造方法的方式的属性注入

2.set方法的方式的属性注入

 Set方法设置对象类型的属性

 3.P名称空间的属性注入

通过引入p名称空间完成属性的注入:

写法:

  普通属性 p:属性名="值"

  对象属性 p:属性名-ref="值"

p名称空间的引入:

使用p名称空间 :

 

SpEL的属性注入(Spring3.0以后版本) 

SpEL:Spring Expression Language,Spring的表达式语言。

语法:

  #{SpEL }

 复杂(集合)类型的属性注入(如:数组、List、Set、Map、Properties)

 Spring的分模块开发的配置(将Spring的配置文件分成多个 )

1.在加载配置文件的时候,加载多个

2.在一个配置文件中引入多个配置文件

CRM的综合案例(客户保存)

一.搭建开发环境

1.创建数据库和表

2.创建web项目,引入jar包

引入struts2的开发的jar包

引入struts2的配置文件

  web.xml(核心过滤器)

  struts.xml

3.引入页面

4.编写Action

 5.配置Action

 6.修改页面提交到Action

7.编写Action的save方法

不在Action中直接创建Service,将Service交给Spring管理。

创建Service接口和实现类

 8.引入Spring的环境

引入jar包

引入配置文件

9.将Service交给Spring管理

 10.在Action中调用Service

 11.编写DAO并且完成配置

编写DAO的接口和实现类

 将DAO交给Spring管理

12.在Service中使用DAO

 

 说明: 这个项目缺失了,包括hibernate的配置及整合spring的部分、监听器的部分也没有

Spring的整合web项目

演示Spring和web项目中的一些问题:

  每次请求都会创建Spring的工厂,浪费服务器资源。

解决:

  在服务器启动的时候创建Spring的工厂

  将工厂保存到ServletContext中

  每次获取工厂的时候从ServletContext中获取

整合web项目

  引入spring_web.jar

  配置ContextLoaderListener

    默认加载的是/WEB-INF/applicationContext.xml

    配置修改加载配置文件的路径

  通过工具类获取工厂

day02-注解IOC

Spring的IOC的注解开发

Spring的IOC的注解开发的入门

1.创建web项目,引入jar包

在Spring4的版本中,除了引入基本的开发包以外,还需要引入aop的包。

 2.引入Spring的配置文件

在src下创建applicationContext.xml

  引入约束:使用注解开发引入context约束。 

  约束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

 3.创建接口和实现类

4.开启Spring的组件扫描

5.在类上添加注解 

 6.编写测试类

7.注解方式设置属性的值

注解方式:使用注解方式,可以没有set方法。

  属性如果有set方法,需要将属性注入的注解添加到set方法。

  属性如果没有set方法,需要将属性注入的注解添加到属性上。  

 Spring的IOC的注解的详解

1.@Component:组件

修饰一个类,将这个类交给Spring管理。(前提:xml文件要配置组件扫描)

这个注解有三个衍生注解(功能类似),修饰类。

  @Controller:web层

  @Service:service层

  @Repository :dao层

 2.属性注入的注解

普通属性:

  @Value:设置普通属性的值

对象类型属性:

  @Autowired:设置对象类型的属性的值,但是按照类型完成属性注入。

    我们习惯是按照名称完成属性注入:必须让@Autowired注解和@Qualifier注解(@Qualifier(value="userDao"),这里设置的值需要和@Repository("userDao")注解设置的值保持一致)一起使用完成按照名称属性注入。

  @Resource:完成对象类型的属性的注入,按照名称完成属性注入。(@Resource(name="userDao"))

Bean的其他的注解

生命周期相关的注解(了解)

@PostConstruct:初始化方法

@PreDestroy:销毁方法

Bean作用范围的注解

@Scope:作用范围

  singleton:默认单例

  prototype:多例

  request

  session

  globalsession

IOC的XML和注解开发比较

适用场景:

  XML:可以适用任何场景。

    结构清晰,维护方便。

  注解:有些地方用不了,这个类不是自己提供的。

    开发方便。

 XML和注解整合开发

XML管理Bean,注解完成属性注入。 

说明:只有属性使用注解的方式,无需写扫描,只需要写下面的代码配置即可。另外,如果是属性注入,也无需写set方法。

Spring的AOP的XML开发

AOP的概述

什么是AOP

AOP:面向切面编程。AOP是OOP的扩展和延伸,解决OOP开发遇到的问题。

AOP的应用场景

 Spring底层的AOP实现原理

动态代理

  JDK动态代理:只能对实现了接口的类产生代理。

  Cglib动态代理(类似于Javassist第三方代理技术):对没有实现接口的类产生代理对象,生成子类对象。

Spring的AOP底层实现(了解)

1.JDK动态代理

 

2.Cglib动态代理

Cglib:第三方开源代码生成类库,动态添加类的属性和方法。

 Spring的AOP的开发(AspectJ的XML的方式)

Spring的AOP的简介

AOP思想最早是由AOP联盟组织提出的。Spring使用这种思想最好的框架。

  Spring的AOP有自己实现的方式(非常繁琐)。AspectJ是一个AOP的框架,Spring引入AspectJ作为自身AOP的开发。

  Spring两套AOP开发方式

    Spring传统方式(弃用)

    Spring基于AspectJ的AOP的开发(使用)

AOP开发中相关术语

 Spring的AOP的入门(AspectJ的XML的方式)

1.创建web项目,引入jar包

  引入基本开发包

  引入aop开发的相关jar包

2.引入Spring的配置文件

  引入aop的约束(记得配置提示) 

3.编写目标类并完成配置

 4.编写测试类

Spring整合Junit单元测试 (不需要重复定义工厂了)

  先引入一个jar包(spring-test-4.2.4.RELEASE.jar)

 5.编写一个切面类

将切面类交给Spring

 6.通过AOP的配置实现

 Spring中通知类型

1.前置通知:在目标方法执行之前进行操作(权限管理)

  前置通知:获得切入点信息

2.后置通知:在目标方法执行之后进行操作(日志记录)

  后置通知:获得方法的返回值

说明:returning配置的值可以随便写,但是要求和切面类中的方法参数的名称保持一致。

3.环绕通知:在目标方法执行之前和之后进行操作(性能监控)

  环绕通知:可以阻止目标方法的执行

 

4.异常抛出通知:在程序出现异常的时候,进行的操作(事务管理)

throwing后面的值表示异常抛出的信息,随便命名,只要和切面类中调用方法的参数保持一致即可。

5.最终通知:无论代码是否有异常,总是会执行(相当于finally代码块中内容)。

6.引介通知(不用会)

Spring的切入点表达式写法

切入点表达式语法:

基于execution的函数完成的

语法

  [访问修饰符] 方法返回值 包名.类名.方法名(参数)

  public void com.itheima.spring.CustomerDao.save(..)

  * void com.itheima.spring.CustomerDao+.save(..) :+表示当前类及其子类的save方法都可以被增强,*表示返回值是任意类型,..表示任意参数

day03-事务&JDBC模板

Spring的AOP的基于AspectJ注解开发

1.创建项目,引入jar包

2.引入配置文件

3.编写目标类并配置

 4.编写切面类并配置

5.使用注解的AOP对目标类进行增强 

在配置文件中打开注解的AOP开发

 在切面类上使用注解

@Aspect:定义切面

6.编写测试类

 Spring的注解的AOP的通知类型

1.@Before:前置通知

2.@AfterReturning:后置通知

3.@Around:环绕通知

 4.@AfterThrowing:异常抛出通知

5.@After:最终通知

Spring的AOP的注解的切入点的注解

 说明:如果目标对象实现了接口,spring底层会自动使用jdk动态代理,未实现接口,底层会自动使用Cglib动态代理。

Spring的JDBC的模板的使用

Spring是EE开发的一站式的框架,有EE开发的每层的解决方案。Spring对持久层也提供了解决方案:ORM模块和JDBC的模块。

Spring提供了很多的模版用于简化开发。

JDBC模版使用的入门

1.创建项目,引入jar包

  引入基本的开发包

  数据库驱动

  Spring的JDBC模版的jar包

 2.创建数据库和表

3.使用JDBC的模版:保存数据

 将连接池和模版交给Spring管理

1.引入Spring的配置文件

 2.使用JDBC的模版

  引入spring_aop的jar包

使用开源的数据库连接池

DBCP的使用:database connection pool

引入jar包

 配置DBCP连接池

C3P0的使用 

引入c3p0连接池jar包

配置C3P0连接池

抽取配置到属性文件

1.定义一个属性文件

 2.在Spring的配置文件中引入属性文件

第一种

 第二种

 3.引入属性文件的值

4.测试

补充小技巧:STS插件(国外网站在线下载和安装,特别慢):可以在写类名的时候给出全类路径 

使用JDBC模版完成CRUD的操作(说明:增删改是一样的,都是使用update)

1.保存操作

2.修改操作

 3.删除操作

 4.查询操作

查询某个属性

查询返回对象或集合

 数据封装

Spring的事务管理

事务的回顾

什么是事务?

事务:逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

事务的特性?

原子性:事务不可分割

一致性:事务执行前后数据完整性保存一致

隔离性:一个事务的执行不应该受到其他事务的干扰

持久性:一旦事务结束,数据就持久化到数据库

如果不考虑隔离性引发安全性问题?

读问题

  脏数据:一个事务读到另一个事务未提交的数据

  不可重复读:一个事务读到另一个事务已经提交的update的数据,导致一个事务中多次查询结果不一致

  虚读、幻读:一个事务读到另一个事务已经提交的insert的数据,导致一个事务中多次查询结果不一致

写问题

  丢失更新

解决读问题?

设置事务的隔离级别

  Read uncommitted:未提交读,任何读问题解决不了

  read committed:已提交读,解决脏读,但是不可重复读和虚读有肯能发生(oracle)

  repeatable read:重复读,解决脏读和不可重复读,但是虚读有可能发生(mysql)

  serializable:解决所有读问题

Spring的事务管理的API

PlatformTransactionManager:平台事务管理器

平台事务管理器:接口,是spring用于管理事务的真正的对象。

  DataSourceTransactionManager:底层使用JDBC管理事务

  HibernateTransactionManager:底层使用Hibernate管理事务

TransactionDefinition:事务定义信息

事务定义:接口,用于定义事务的相关的信息,如:隔离级别,超时信息,传播行为,是否只读

TransactionStatus:事务的状态

事务状态:用于记录在事务管理过程中,事务的状态的对象。

事务管理的API的关系

Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。

Sping的事务的传播行为

Sping中提供了七种事务传播行为(解决问题:解决复杂业务的相互调用问题)

  保证多个操作在同一个事务中

    PROPAGATION_REQUIRED:默认值,如果A中有事务,使用A中的事务,如果A没有,创建一个新的事务,将操作包含进来

    PROPAGATION_SUPPORTS:支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。

    PROPAGATION_MANDATORY:如果A中有事务,使用A中的事务,如果A没有事务,抛出异常。

  保证多个操作不在同一个事务中

    PROPAGATION_REQUIRES_NEW:如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含自身的操作。如果A中没有事务,创建一个新事务,包含自身操作。

    PROPAGATION_NOT_SUPPORTED:如果A中有事务,将A的事务挂起,不使用事务管理。

    PROPAGATION_NEVER:如果A中有事务,报异常。

  嵌套式事务

    PROPAGATION_NESTED:嵌套事务,如果A中有事务,按照A的事务执行。执行完成后,设置一个保存点,执行B中的操作,如果没有异常,执行通过。如果有异常,可以选择回滚到保存点。

Spring的事务管理

1.搭建Spring的事务管理的环境

创建Service的接口和实现类

创建DAO的接口和实现类

配置Service和DAO:交给Spring管理

 在DAO中编写扣钱和加钱的方法:

  配置连接池和JDBC的模板

  在DAO中注入jdbc的模板:

   继承JdbcDaoSupport,就不需要在xml文件中编写jdbc模版托管给bean管理的配置,直接注入datasource即可。因为类JdbcDaoSupport中有创建模版的方法,会自动创建。

 Spring的事务管理:一类:编程式事务(需要手动编写代码)--了解

1.第一步:配置平台事务管理器

 2.第二步:Spring提供了事务管理的模板类

配置事务的管理的模板类

 3.第三步:在业务层注入事务管理的模版

 4.编写事务管理的代码

 Spring的事务管理:二类:声明式事务管理(通过配置实现)--AOP

1.XML方式的声明式事务管理

第一步:引入aop的开发包

第二步:恢复转账环境

第三步:配置事务管理器

 第四步:配置增强

 第五步:AOP的配置 

2.注解方式的声明式事务管理

第一步:引入aop的开发包

第二步:恢复转账环境

第三步:配置事务管理器

第四步:开启注解事务

 第五步:在业务层添加注解

day04-SSH整合

SSH整合方式一:无障碍整合

   SSH的回顾

SSH整合

1.第一步:创建WEB项目,引入jar包

Struts2的jar包

  struts-2.3.24\apps\struts2-blank\WEB-INF\lib\*.jar

  Struts2中有一些包需要了解的:

    struts2-convention-plugin-2.3.24.jar      ---Struts2的注解开发包

    struts2-json-plugin-2.3.24.jar               ---Struts2的整合AJAX的开发包

    struts2-spring-plugin-2.3.24.jar            ---Struts2的整合Spring的开发包

Hibernate的jar包

  Hibernate的开发的必须的包

    hibernate-release-5.0.7.Final\lib\required\*.jar

  MySQL驱动

  日志记录

  ⚠️注意:Struts2和Hibernate都引入了一个相同的jar包(javassist包)。删除一个版本低的 

  使用C3P0连接池:

Spring的jar包 

  IOC的开发

   AOP的开发

  JDBC模板的开发

  事务管理

  整合web项目的开发

  整合单元测试的开发

  整合hibernate的开发

 2.第二步:引入配置文件

Struts的配置文件

  web.xml

  struts.xml

Hibernate的配置文件

  hibernate.cfg.xml

  映射文件(hibernate.hbm.xml)

  日志文件

Spring的配置文件

  web.xml

  applicationContext.xml

  日志记录

    log4j.properties

3.第三步:创建包结构

 4.第四步:创建相关的类

5.第五步:引入相关页面

6.第六步:修改add.jsp

7.第七步:Spring整合Struts2,方式一:Action由Struts2自身创建的

编写Action

 配置Action

  在Struts.xml中配置

 在Action中引入Service

  传统方式

   进行Spring和Struts2的整合:

    引入struts-spring-plugin.jar

    在插件包中有如下配置

   开启一个常量:在Struts2中只要开启这个常量,就会引发下面常量生效:

   让Action按照名称自动注入Service:

将Service交给Spring管理

 Action注入Service

8.第八步:Spring整合Struts2方式二:Action交给Spring管理(推荐)

引入插件包

  引入struts-spring-plugin.jar

将Action交给Spring

 在struts.xml中配置Action

 ⚠️注意:

  需要配置Action为多例的:

   需要手动注入Service

9.第九步:Service调用DAO

将DAO交给Spring管理

在Service注入DAO

 

10.第十步:Spring整合Hibernate框架

创建数据库和表

编写实体和映射 

Spring和Hibernate整合

  在Spring的配置文件中,引入Hibernate的配置信息

  在Spring和Hibernate整合后,Spring提供了一个Hibernate的模版类简化Hibernate开发 

    改写DAO继承HibernateDaoSupport

   配置的时候在DAO中直接注入SessionFactory

  在DAO中使用Hibernate的模版完成保存操作 

 11.第十一步:配置Spring的事务管理

  配置事务管理器

   开启注解事务

 在业务层使用注解

 

SSH整合方式二:将hibernate的配置交给Spring管理

SSH整合方式二:不带hibernate配置文件(hibernate.cfg.xml)

1.复制一个项目(注意:复制web项目后,需要修改项目属性下的项目名称)

2.hibernate配置文件中有哪些内容

数据库连接的配置

hibernate的相关的属性的配置

  方言

  显示SQL

  格式化SQL

C3P0连接池

映射文件

3.将Hibernate的配置交给Spring

 

Hibernate的模版的使用==待学习

延迟加载问题的解决==待学习

标签:事务,框架,Spring,jar,AOP,引入,注解
From: https://www.cnblogs.com/sf-express/p/17546534.html

相关文章

  • JAVA面试之SpringMVC
    一、工作流程流程 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet调用Han......
  • pdf自动化框架基础指南十三大类知识点
    少说话,直接上图,先给大家看一个大概的本自动化框架基础指,面向零基础、有一定自动化测试经验但缺乏系统的基础知识的人员目的是提供一个相对系统的自动化框架知识经验的分享,本文档不保证其先进性,精确性,欢迎拍砖打我下一步计划是准备耗费2-3个月业余时间,对IEEE中关键字驱动框架相关文......
  • idea创建spring boot项目没有Spring Initializr
    使用Idea创建SpringBoot项目没有SpringInitializr的方法在使用Idea开发Java项目时,通常可以通过SpringInitializr来快速创建SpringBoot项目。但是,有些情况下我们可能无法使用SpringInitializr来创建项目,比如网络环境受限,无法访问SpringInitializr的在线服务。那么有没有其他......
  • SpringCloud实现浏览器端大文件分块上传
    ​ 1.创建SpringBoot项目本项目采用springboot+mybatis-plus+jquery+thymeleaf组成2.项目流程图 ​编辑3.在pom中添加以下依赖12345678910111213141516171819202122232425262728293031<!--lombok依赖-->  <dependency> ......
  • Vue+springboot集成PageOffice实现在线编辑Word、excel文档
    说明:PageOffice是一款在线的office编辑软件,帮助Web应用系统或Web网站实现用户在线编辑Word、Excel、PowerPoint文档。可以完美实现在线公文流转,领导批阅,盖章。可以给文件添加水印,在线安全预览防止用户下载和复制文件等一、环境要求前端Vue项目:Node.js10及以上版本(当前集成方式......
  • java 缓存框架
    如何实现Java缓存框架作为一名经验丰富的开发者,我将向你介绍如何实现一个简单的Java缓存框架。在这篇文章中,我们将按照以下步骤展示整个过程,并提供相应的代码示例和注释。步骤一:定义缓存接口首先,我们需要定义一个缓存接口,用于规范缓存框架的基本功能。以下是一个示例的缓存......
  • Idea SpringBoot 项目启动时提示程序包不存在和找不到符号
    从git上克隆了一个SpringBoot项目,并且使用Maven编译也通过了,奇怪的是当BuildProject时却提示符号不存在。如下图: 先查看导入的类是否存在,如果不存在的话,那查看一下是否缺少了maven依赖。我这边是可以访问到类的,并且jar包也导入成功了。 也尝试了网上的解决方法,设置Proj......
  • spring boot使用mongodb时,xxxRepository不能Autowired的问题
    默认情况下,当继承MongoRepository的CRUD在@SpringBootApplication的子包下时,xxxRepository是能够自动被扫描和创建代理的。但是如果不在默认路径下,就无法注入了,即使是扫描路径加到了@ComponentScan也一样。解决方法:在springboot启动类中添加@EnableMongoRepositories注解,标注mon......
  • 【Java面试题】Spring是如何解决循环依赖问题?
    ......
  • Spring + SpringMVC + SpringBoot + MyBatis 相关注解
    创建对象的:@Controller:放在类的上面,创建控制器对象,注入到容器中@RestController:放在类的上面,创建控制器对象,注入到容器中。作用:复合注解是@Controller,@ResponseBody,使用这个注解类的,里面的控制器方法的返回值都是数据@Service:放......