自动装配有五种模式,可用于指示Spring容器使用autowiring进行依赖注入:
-
no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。
-
byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。
-
byType:过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出异常。
-
constructor:这个方式类似于byType, 但是要提供构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
-
autodetect:首先尝试使用constructor来自动装配,如果不行,则使用byType方式。
自动注入的限制:
-
重写: 你仍可以用 < constructor-arg >和 < property > 配置来定义依赖,这些配置将始终覆盖自动注入。
-
基本数据类型:不能自动装配简单的属性,如基本数据类型、字符串和类。
-
模糊特性:自动装配不如显式装配精确,如果有可能尽量使用显示装配。
是的,可以。
============================================================================
我在项目中使用的一些Spring注解:
-
@Component:用于指示类是组件。这些类用于自动注入,并在使用基于注解的配置时配置为bean。
-
@Controller:是一种特定类型的组件,用于MVC应用程序,主要与@RequestMapping注解一起使用。
-
@Repository:用于表示组件用作存储库和存储/检索/搜索数据的操作。我们可以将此注解应用于DAO实现类。
-
@Service:用于指示类是服务层。
-
@Required:此注解简单地说明作用的bean属性必须在配置时通过bean定义中的显式属性值或通过自动注入填充。如果作用的bean属性未填充,容器将抛出BeanInitializationException。
-
@ResponseBody:用于将对象作为response,通常用于将XML或JSON数据作为response发送。
-
@PathVariable:用于将动态值从URI映射到处理方法参数。
-
@Autowired:对自动注入的位置和方式提供了更细粒度的控制。它可以用于在setter方法上自动注入bean。就像@Required 注解一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。
-
@Qualifier:当有多个相同类型的bean并且只需要将一个bean自动注入时,@Qualifier注解与@Autowired注释一起使用,通过指定将连接哪个bean来消除歧义。
-
@Scope:配置Spring bean的作用域。
-
@Configuration:表示Spring IOC容器可以将该类用作bean定义的源。
-
@ComponentScan:应用此注解时,将扫描包下的所有可用类。
-
@Bean:对于基于java的配置,用@Bean注解修饰的方法将返回一个在Spring应用程序上下文中注册为Bean的对象。
-
用于配置切面和通知、@Aspect、@Before、@After、@Around、@Pointcut等的AspectJ注解。
spring中的@RequestParam注解将查询字符串的参数值绑定到控制器的方法参数。
当有多个相同数据类型的bean时,开发人员Spring的@Primary注解,它会自动为特定bean提供更高的优先级。这个注解可以用在任何直接或间接用@Component注解修饰的类上,也可以用在用@Bean注解修饰的方法上。
注解的优点:
-
所有信息都在一个文件中
-
当类更改了,不用修改xml配置文件
xml配置的优点:
-
POJO及其行为之间更清晰地分离
-
当你不知道哪个POJO负责该行为时,更容易找到该POJO
48、@SpringBootApplication的作用是什么?
@SpringBootApplication注解是在springboot1.2.0中引入的,它支持自动配置特性。
此批注封装了三种不同注解的作用:
-
@Configuration:允许开发人员显式地注册bean
-
@ComponentScan:启用组件扫描,这样控制器类和其他组件将被自动发现并注册为Spring应用程序上下文中的bean
-
@EnableAutoConfiguration:启动SpringBoot的自动配置特性
此注解可以使用以下可选参数:
-
exclude:从自动配置中排除的类列表
-
excludeNames:从自动配置中排除完全限定类名的列表
-
scanBasePackage:其中提供了扫描程序包的列表
-
scanBasePackageClasses:提供必须应用于扫描的其他包中的类的列表
此注解修饰在声明日期格式的方法上,并且在整个类中,使用定义的日期格式。每当绑定作用在日期字段@InitBinder注解中时,说明使用CustomDateEditor,而CustomDateEditor则使用@InitBinder中声明的日期格式。
有@ControllerAdvice注解的类可以显式声明为Spring bean,或者通过类路径扫描自动注入。所有这样的bean都是通过AnnotationAwareOrderComparator排序的,即基于@Order和Ordered,并在运行时按该顺序调用。对于处理异常,将使用匹配的异常处理程序方法在第一个通知上选择一个@ExceptionHandler。对于模型属性和InitBinder初始化,@ModelAttribute和@InitBinder方法也将遵循@ControllerAdvice顺序。
是的,我们可以使用@ResponseBody注解在restful web服务中发送基于JSON或XML的响应。
@ModelAttribute注解引用模型对象的属性,用于准备模型数据。此注解将方法变量或模型对象绑定到命名的模型属性。此注解接受一个可选值,该值表示模型属性的名称。@ModelAttribute注解可以在参数级别或方法级别使用。在参数级别使用此注解是为了接受请求表单值,而在方法级别则是将默认值分配给模型。
@RequestMapping注解用于将web请求映射到处理程序类(即控制器)或处理程序方法上,它可以在方法级或类级使用。如果开发人员在类级别使用@RequestMapping注释,它将作为方法级路径的相对路径。
54、什么是spring中基于java的配置?给出一注解示例
基于Java的配置选项使你能够在不使用XML的情况下编写大多数Spring配置,但是需要一些基于Java的注释的帮助。
一个例子是@Configuration注释,它表示spring IOC容器可以将该类用作bean定义的源。另一个例子是@Bean注解的方法,该方法将返回一个对象,该对象应在Spring应用程序上下文中注册为bean。
XML配置之外的另一种选择是基于注解的配置,它依赖字节码元数据来装配组件,而不是尖括号声明。开发人员不使用XML来描述bean装配,而是通过在相关的类、方法或字段声明上使用注解将配置移动到组件类中。
默认情况下,Spring容器中的注解装配不会打开。为了使用基于注解的装配,我们必须在Spring配置文件中配置context:annotation-config/ 元素。
===============================================================================
-
SimpleJdbcTemplate
-
NamedParameterJdbcTemplate
-
SimpleJdbcInsert
-
SimpleJdbcCall
使用SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写statements 和 queries从数据存取数据,JDBC也可以在Spring框架提供的模板类的帮助下更有效地被使用,这个模板叫JdbcTemplate 。
JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。
60、如何通过spring JdbcTemplate获取数据?
有两个接口可用于从数据库中获取数据:
61、NamedParameterJdbcTemplate的优点是什么?
NamedParameterJdbcTemplate是基于spring提供的JDBCTemplate构建的,用于与数据库的底层交互。它可以将SQL查询参数作为键值对传递。因此,与索引或“?”相比,程序代码的可读性要高得多,因此可以作为更好的标识“?“”占位符方法。特别是在参数数目庞大的情况下,后者更难跟踪。
62、什么是SpringJDBCTemplate类以及如何使用它?
JdbcTemplate类执行SQL查询、update语句和存储过程调用,对结果集执行迭代,并提取返回的参数值。它隐式处理资源的创建和释放,从而避免诸如忘记关闭连接之类的错误。它还捕获JDBC异常并进行包装。
Spring JDBC在JDBC的顶层提供数据操作:
1、定义连接参数
2、打开连接
3、指定语句
4、准备并执行语句
5、设置循环以迭代结果(如果有)
6、操作每个迭代
7、处理任何异常
8、处理事务
9、关闭连接
Spring中对数据访问对象(DAO)的支持目的使人们更容易以一致的方式使用JDBC、Hibernate或JDO等数据访问技术。这使我们可以相当容易地在持久性技术之间切换,也可以不必担心捕捉每种技术特有的异常。
有两种方式使用Spirng访问Hibernate。
-
使用Hibernate模板和回调进行控制反转。
-
扩展HibernateDAOSupport并应用AOP拦截器节点。
Spring支持下面的ORM:
-
Hibernate
-
iBatis
-
JPA(Java持久化API)
-
TopLink
-
JDO (Java Data Objects)
-
OJB
67、如何使用HibernateDaoSupport集成Spring和Hibernate?
用Spring的 SessionFactory 调用 LocalSessionFactory。集成过程分三步:
-
配置the Hibernate SessionFactory
-
继承HibernateDaoSupport实现一个DAO
-
在AOP支持的事务中装配
-
编程式事务管理: 这意味你通过编程的方式管理事务,给你很大的灵活性,但是难维护。
-
声明式事务管理: 这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。
-
它提供了跨不同事务api(如JTA、JDBC、Hibernate、JPA和JDO)的一致编程模型。
-
它为编程事务管理提供了比JTA等许多复杂事务API更简单的API。
-
它支持声明式事务管理。
-
它很好地集成了Spring的各种数据访问抽象。
大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。
==============================================================================
面向切面编程,或AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。
a.它是非侵入性的
-
你的service/domain类被切面通知,而无需在service/domain类中添加任何与spring aop相关的类或接口。
-
允许开发人员专注于业务代码,而不是切点。
b.它是用纯Java实现的
- 不需要特殊的编译单元或特殊的类加载器
c.它使用Spring的IOC进行依赖注入
- 切面可以配置为普通的spring bean。
d.与任何其他AOP框架一样,它将横切关注点编织到类中,而不从这些类中调用横切关注点。
e.集中或模块化横切关注点
-
易于维护和更改切面
-
改变需要在一处进行。
-
在你不希望有的类中有日志记录,可以通过修改相应切面(日志切面)中的切入点来轻松实现。所以你只需要在一个地方做出改变。
f.用于使用基于模式(XML配置)或@AspectJ基于注解的方式创建切面。
g.易于配置
AOP实现:
Spring AOP:
-
通过动态代理实现
-
它只支持方法级切入点
-
它是基于DTD的
Apache AspectJ:
-
通过aspectj java工具实现编译时编织,是通过静态代理实现的
-
它支持字段级切入点
-
它是基于模式和注解配置的
-
切面
-
通知
-
切点
-
连接点
-
引入
-
目标对象
-
AOP代理
-
织入
AOP的核心结构是切面,它将影响多个类的行为封装到可重用的模块中。提供了一组跨领域需求的ia模块。例如,一个日志模块将被称为AOP切面进行日志记录。根据需求,应用程序可以有任意数量的切面。在spring aop中,切面是使用带有@Aspect注释(@AspectJ样式)注解的常规类来实现的。
连接点代表一个应用程序的某个位置,在这个位置我们可以插入一个AOP切面,它实际上是个应用程序执行Spring AOP的位置。
通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP框架触发的代码段。
Spring切面可以应用五种类型的通知:
-
before: 前置通知,在一个方法执行前被调用
-
after: 在方法执行之后调用的通知,无论方法执行是否成功
-
after-returning: 仅当方法成功完成后执行的通知
-
after-throwing: 在方法抛出异常退出时执行的通知
-
around: 在方法执行之前和之后调用的通知
切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。
引入允许我们在已存在的类中增加新的方法和属性。
目标对象是由一个或多个切面通知的对象。它将始终是一个代理对象。它也被称为通知(advised)对象。
代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。
-
BeanNameAutoProxyCreator
-
DefaultAdvisorAutoProxyCreator
-
Metadata autoproxying
织入是将切面和到其他应用类型或对象连接或创建一个被通知对象的过程。
织入可以在编译时,加载时,或运行时完成。
关注点是我们希望在应用程序的模块中拥有的行为。关注点可以定义为我们想要实现的功能。
横切关注点是一个在整个应用程序中都适用的关注点,它会影响整个应用程序。例如,日志记录、安全性和数据传输是应用程序中几乎每个模块都需要的关注点,因此它们是横切关注点。
在这种情况下,切面由常规类以及基于XML的配置实现。
在这种情况下(基于@AspectJ的实现),涉及到的切面声明的风格与带有java5标注的普通java类一致。
G.Spring Model View Controller (MVC)
======================================================================================================
Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。
88、创建spring mvc应用程序所需的最少配置是什么?
为了创建一个简单的Spring MVC应用程序,我们需要做以下工作:
-
在项目中添加spring上下文和spring-webmvc依赖。在web.xml中配置DispatcherServlet来通过spring容器处理请求。
-
定义bean的spring bean配置文件,如果使用注解,那么必须在这里配置它。我们还需要为视图页面配置视图解析器。
-
定义用于处理客户端请求的请求映射的控制器类。
-
浏览器向DispatcherServlet发送请求
-
DispatcherServlet获取HanderMapping并找到适当的控制器
-
控制器执行请求并将数据放入模型中,并将视图名称返回给DispatcherServlet。
-
DispatcherServlet通过视图名称和ViewResolver映射到对应的视图。
Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。
WebApplicationContext 继承了ApplicationContext 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。
控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。
93、你如何将spring mvc框架与MVC架构联系起来?
SpringMVC框架:
- Spring框架是一个开源的web应用程序框架和Java平台的控制反转容器。
MVC架构:
- MVC(Model-View-Controller,简称MVC)是一种用于开发web应用程序的软件设计模式.
94、Spring MVC中的ViewResolver是什么?
Spring提供了ViewResolver,它使你能够在浏览器中渲染模型,而无需将绑定到特定的视图技术。例如,Spring允许您使用jsp、Velocity模板和XSLT视图。对Spring处理视图的方式很重要的两个接口是ViewResolver和View。ViewResolver提供视图名称和实际视图之间的映射。View接口处理请求的准备工作,并将请求移交给某一个视图技术。
spring mvc通过MultipartResolver提供多请求支持。MultipartResolver解析入站多请求。你可以通过在DispatcherServlet应用程序上下文中注册MultipartResolver bean来启用多请求支持。
Spring为通过MultipartResolver接口为上传文件提供了内置支持。该字段还有一个验证器,用于检查上载的文件的大小是否大于零。最后只需要一个简单的视图,其中包含一个带有上载文件选项的表单。
这里有三种方式去提供校验:使用注解、手动校验、或者两者混合。
Spring的处理程序映射机制包括处理程序拦截器,当你希望将特定功能应用于某些请求时,例如,检查用户主题时,这些拦截器非常有用。拦截器必须实现org.springframework.web.servlet包的HandlerInterceptor。此接口定义了三种方法:
-
preHandle:在执行实际处理程序之前调用。
-
postHandle:在执行完实际程序之后调用。
-
afterCompletion:在完成请求后调用。
======================================================================
Spring security是Spring框架中最重要的模块之一。它使开发人员能够以一种可管理的方式轻松地集成安全特性。在下面的示例中,我们将展示如何在springmvc应用程序中实现Spring安全性。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-y008hLc7-1712906873115)]
[外链图片转存中…(img-H7qXnNhh-1712906873116)]
[外链图片转存中…(img-DGWJu8Au-1712906873117)]
[外链图片转存中…(img-dp2dyugW-1712906873117)]
[外链图片转存中…(img-TmNxq2jf-1712906873117)]
[外链图片转存中…(img-L5PtQVEy-1712906873117)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-afcM0Gb5-1712906873118)]
最后
经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
[外链图片转存中…(img-KKU8yYN1-1712906873118)]
[外链图片转存中…(img-w5Nd8CNb-1712906873118)]
[外链图片转存中…(img-RDv0Q959-1712906873119)]
[外链图片转存中…(img-AM6ZMYZQ-1712906873119)]
[外链图片转存中…(img-pdcyNjRA-1712906873119)]
[外链图片转存中…(img-fX56LBXU-1712906873120)]
[外链图片转存中…(img-Fv5tMz6x-1712906873120)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-clVdyTnG-1712906873120)]