Spring 词汇表

Spring是一个非常常用的Java框架, 由其衍生出的框架还有Spring MVC, SpringBoot等。
可以说Spring系列几乎统治了现代Java领域。对于需要通过开发关的本科生来说, 具有很大的学习意义.

网站应用开发归纳起来两大块就是前端和后端.

在最初的解决方案中, 使用jsp作为前端渲染界面, Servlet xml文件作为前端控制器, 配置用来控制的 DispatcherController 的Java代码.
dispatcher xml 文件中的 JavaBean 作为一种中间件写法, 将对应的前端访问页面请求调转到对应的后端 Java Controller 类中进行处理.
后端的 Controller 类只需要重写 handleRequest 方法, 就可以将新的前端界面打包到 ModelAndView 类中返回.

为了开发的方便,出现了框架。框架的三要素:约束性、支撑性、半成品。

Spring bean: Spring框架在运行时管理的对象。Spring bean是任何Spring应用程序的基本构建块。你编写的大多数应用程序逻辑代码都将放在Spring bean中。

Spring bean的管理包括:

  • 创建一个对象
  • 销毁一个对象
  • 提供依赖项(如其他bean、配置属性)
  • 拦截对象方法调用以提供额外的框架功能

IOC:Inversion of Control(控制反转),又称为DI:(依赖注入)。我们知道,如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。而IOC容器将对象之间的关联统一管理,如图所示。
IOC
在去掉IOC的情况下对象就是解耦合状态。现在假设对象A中需要依赖对象B,在以往没有IOC的情况下是在A中主动创建出对象B。而出现了IOC后,A与B之间失去了直接联系,当A需要对象B的时候,由IOC容器主动创建一个对象B注入到对象A需要的地方,依赖注入因此得名。对象A创建对象B变成了被动的过程,“控制反转”因此得名。

Spring是一个容器,包含并管理bean的生命周期.

AOP: Aspect Oriented Programming. 面向切面编程,是对OOP缺点的完善和补充。

Spring 常用注解

@Configuration 表明是一个配置类,配置类也是一个组件
@Component, @Controller, @Repository 组件类注解,表明交由Spring管理
@Before 前置通知
@After 后置通知
@Order 切面优先级

Spring MVC 常用注解

@RequestMapping() 表示对应的路径

@ResponseBody 表示函数返回参数传递回前端

@RequestParam 用于注解controller中函数参数,表明该参数需要由前端传递。

举例:

1
2
3
4
5
@ResponseBody
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public String login(@RequestParam String username, @RequestParam String password) {
......
}

Spring Boot 常用注解

@SpringBootApplication 主配置类

@SpringBootConfiguration

其他常用注解

一些出错和解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 10 in XML document from class path resource [beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 17; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'aop:config'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:402)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:338)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromImportedResources$0(ConfigurationClassBeanDefinitionReader.java:378)
at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromImportedResources(ConfigurationClassBeanDefinitionReader.java:345)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:147)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
... 63 more

出现了xml无法解析的情况,原因是在xml配置文件中 xsi:schemaLoaction 中每个配置网址后面没有接对应的 .xsd 文件,如

无法进入切面

首先检查切入点表达式有没有问题

可以适当扩大切入点范围,查看jointPoint对应切面函数内容

最重要的是,一定调用bean的函数才能触发切面advice,普通对象和方法里调用再内部方法都不行。

外刊精读学习计划 OAuth 项目调研

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×