本文做者: 吴伟祥java
本文连接: https://wuweixiang.cn/2018/08/21/Spring-Boot实战之基础回顾/spring
版权声明: 本博客全部文章除特别声明外均为原创,采用CC BY-NC-SA 4.0 许可协议。转载请在文章开头明显位置注明原文连接和做者等相关信息,明确指出修改(若有),并经过 E-mail 等方式告知,谢谢合做!数据库
Java EE,Java平台企业版(Java Platform Enterprise Edition),以前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月改名为Jakarta EE。是Sun公司为企业级应用推出的标准平台。Java平台共分为三个主要版本Java EE、Java SE和Java ME。编程
Java EE是一系列技术标准所组成的平台,包括:缓存
Servlet - Java Servlet API安全
JDBC - Java数据库联接(Java Database Connectivity)服务器
JSP - Java服务器页面(Java Server Pages)架构
JSTL - Java服务器页面标准标签库(Java Server Pages Standard Tag Library)mvc
JMS - Java消息服务(Java Message Service)app
Applet - Java Applet
EJB - 企业级JavaBean(Enterprise Java Beans)
JAAS - Java Authentication and Authorization Service
JACC - J2EE Authorization Contract for Containers
JAF - Java Beans Activation Framework
JAX-RPC - Java API for XML-Based Remote Procedure Calls
JAX-WS - Java API for XML Web Services
JAXM - Java API for XML Messaging
JAXP - Java XML解析API(Java API for XML Processing)
JAXR - Java API for XML Registries
JCA - J2EE链接器架构(J2EE Connector Architecture)
JMX - Java Management
JNDI - Java名称与目录接口(Java Naming and Directory Interface)
JSF - Java Server Faces
JTA - Java事务API(Java Transaction API)
JavaMail
StAX - Streaming APIs for XML Parsers
WS - Web Services
Spring每一个新版本的推出都以减小配置做为本身的主要目标
在Spring 1.x时代,使用Spring 开发满眼都是xml配置的Bean,随着项目的扩大,咱们须要把xml配置文件放到不一样的配置文件里,那时候须要频繁地在开发的类和配置文件之间切换。
在Spring 2.x 时代,随着JDK1.5带来的注解支持,Spring提供了声明Bean的注解(例如@Component、@Service),大大减小了配置量。主要使用的方式是应用的基本配置(如数据库配置)用xml,业务配置用注解。
Spring 3.0 引入了基于 Java 的配置能力,这是一种类型安全的可重构配置方式,能够代替 XML。咱们目前恰好处于这个时代,Spring4.x开始都推荐使用Java配置。
在当前Java EE 开发中,Spring框架是当之无愧的王者。Spring框架是一个轻量级的企业级开发的一站式解决方案。所谓解决方案就是能够基于spring解决Java EE开发的全部问题。Spring框架提供了IoC容器,AOP、数据访问、Web开发、消息、测试等相关技术的支持。
Spring 使用简单的POJO(Plain Old Java Object,即无任何限制的普通Java对象)来进行企业级开发。每个被Spring管理的Java对象都称之为Bean;而Spring提供了一个IoC容器来初始化对象,解决对象间的依赖管理和对象的使用。
简单地说,这六个模块实现的功能分别为:
Ø 核心容器:核心模块,提供了IoC/DI容器
Ø AOP:AOP的实现和AspectJ的支持
Ø 消息:提供对基于消息应用的支持,提供与Spring Integration的集成
Ø 数据访问与集成:JDBC访问的简化、事务的支持,ORM(Object Relation Mapping)框架(如JPA、Hibernate和Mybatis等)与OXM(Object XML Mapping)框架的集成
Ø Web:Spring MVC的实现,能集成众多模板引擎技术(如Thymeleaf、JSP与Velocity等)
Ø 测试:提供大量Mock对象,支持单元测试;提供Spring Context的测试支持,支持集成测试
1)使用POJO进行轻量级和最小侵入式开发。
2)经过依赖注入和基于接口编程实现松耦合。
3)经过AOP和默认习惯进行声明式编程。
4)使用AOP 和模板减小模式化代码。
Spring全部功能的设计和实现都是基于此四大原则。
Inversion of Control – IOC 和Dependency injection –DI 在Spring环境下是等同的概念,控制翻转是经过依赖注入实现的。所谓的依赖注入指的是容器负责建立对象和维护对象间的依赖关系,而不是经过对象自己负责本身的建立和解决本身的依赖。
依赖注入体现了一种“组合”的理念。主要目的是为了解耦。
Spring IoC容器(ApplicationContext)负责建立Bean,并经过容器将功能类Bean注入到你须要的Bean中。不管是xml配置、注解配置仍是Java配置,都被称为配置元数据(元数据=描述数据的数据)。元数据自己不具有任何可执行的能力,只能经过外界代码来对这些元数据行解析后进行一些有意义的操做。Spring容器解析这些配置元数据进行Bean初始化、配置和管理依赖。
声明Bean的注解:
Ø @Component(没有明确的角色)
Ø @Service(Service层)
Ø @Repository(Dao层)
Ø @Controller(表现层 MVC ->Spring MVC)
注入Bean的注解(可注解在Set方法和属性上):
Ø @Autowired
Ø @Inject
Ø @Resource
Java配置是Spring 4.x推荐方式,能够彻底替代xml配置;Java配置也是Spring Boot推荐的配置方式。
Java配置是经过@Configuration和@Bean来实现的。
Ø @Configuration声明当前类是一个配置类,至关于一个Spring配置的xml文件
Ø @Bean注解在方法上,声明当前方法的返回值为一个Bean
什么时候使用Java配置或者注解配置呢?
全局配置:使用java配置(如数据库相关配置、MVC相关配置)
业务Bean的配置:使用注解配置
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
等价于spring的xml里的配置
<beans> <bean id="myService" class="com.zhoan.service.impl.MyServiceImpl"/> </beans>
Spring支持的AspectJ注解式切面编程
(1)使用@Aspect声明是一个切面
(2)使用@After,@Before,@Around 定义建言(advice),能够直接将拦截规则(切点PointCut)做为参数
(3)为了使切点复用,可以使用@PointCut专门定义拦截规则,而后在@After,@Before,@Around的参数中调用
(4)其中符合条件的每个被拦截处为链接点(JoinPoint)
注解式拦截可以很好的控制要拦截的粒度和得到更丰富的信息,Spring自己在事务处理(@Transcational)和数据缓存池(@Cacheable)等上面都使用了此种形式的拦截
MVC和三层架构是什么关系?
MVC:Model + View + Controller (数据模型+视图+控制器)
三层架构:Presentation tier + Application tier + Data tier(表现层+应用层+数据访问层)
三层架构是一种软件架构设计理念,适用于全部项目;
而mvc只是表现层的一种细化。把表现层划分为M -V- C三个模块。
声明Bean的注解都组合了@Component元注解,但在SpringMVC声明控制器Bean的时候,只能用@Controller
用来映射Web请求(访问路径和参数)、处理类和方法的。方法上的@RequestMapping路径会集成注解在类上的路径。
支持返回值放在response体内,而不是返回一个页面
用来接收路径参数,如/news/{a},/news/1能够接收1做为a的参数值
组合注解,组合了@Controller和@ResponseBody
Ø 静态资源映射
Ø 拦截器配置
Ø 视图解析器配置
Ø 文件上传配置
Ø 自定义HttpMessageConverter