基于IDEA搭建Spring及Spring基础
新建maven项目输入坐标值
定义存储路径 下载构建地址:https://search.maven.org/
![]()
搜索并复制依赖,修改pom.xml <properties> <java.version>1.7</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${java.version}</source><!-- 源文件版本--> <target>${java.version}</target><!-- 输出的文件版本--> </configuration> </plugin> </plugins> </build> 查看依赖树,以来导入成功
Spring基本配置 Spring框架的四大原则: 1.使用POJO进行轻量级和最小侵入式开发 2.通过依赖注入和接口编程实现松耦合 3.通过AOP和默认习惯进行声明式编程 4.使用AOP和版本减少模式化代码 依赖注入:容器负责创建对象和维护对象间的依赖关系 依赖注入实现控制翻转。 依赖注入目的是为了解耦 Spring IoC容器负责创建Bean,通过容器将功能类Bean注入需要的Bean中。 Spring提供使用xml、注解、java配置(前三者统称配置元数据)、groovy配置实现Bean的创建和注入 元数据:描述数据的数据。本身不具备任何可执行的能力,通过外界代码对元数据解析后进行 操作。 Spring容器主要作用于Bean初始化、配置和管理依赖。 声明Bean的注解: @Component组件,没有明确的角色 @Service在业务逻辑层(service层)使用 @Repository在数据访问层(dao层)使用 @Controller在展现层(MVC-Spring MVC)使用 注入Bean的注解,一般情况下通用(注解在set方法和属性上(代码更少,层次更清晰)) @Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 @Resource:JSR-250提供的注解 java配置 通过@Configuration和@Bean实现 @Configuration:声明当前类是一个配置类,相当于xml文件 @Bean:注解在方法上,声明方法返回值为Bean 原则:全局配置使用java配置(数据库相关配置、MVC相关配置) 业务配置使用注解配置(@Service、@Component、@Repository、@Controlle) AOP 面向切面编程,相对于OOP面向对象编程。 Spring的AOP主要用来解耦,让一组类共享相同的行为 Spring支持AspectJ的注解式切面编程。 1)使用@AspectJ声明是一个切面 2)使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数 3)其中@After、@Before、@Around参数的拦截规则为切点(PointCut),为了使切点复用,可使用@PointCut专门定义拦截规则,然后在的@After、@Before、@Around参数中调用 4)其中符合条件的每个被拦截处为连接点(JoinPoint)
Spring常用配置
Bean的@scope 1.Singleton:单例 2.Prototype:原型,每次调用新建一个Bean的实例 3.Request:(Web项目)给每个http request新建一个Bean实例 4.Session:(Web项目)给每个http session新建一个Bean实例 5.GlobalSession:只在Portal应用有用。给每个global http session新建一个Bean实例。 Bean的@Value (1)注入普通字符 (2)注入操作系统属性 (3)注入表达式运算结果 (4)注入其他Bean的属性 (5)注入文件内容 (6)注入网址内容 (7)注入属性内容 Bean的初始化和销毁 java配置方式:使用@Bean的initMethod和destroyMethod 注解方式:利用JSR-250的@PostConstruct和@PreDestroy Profile 通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境,使用@Profile注解泪或方法,达到在不同情况下选择实例化不同的Bean。 事件 Bean之间的消息通信,当一个Bean处理完任务,希望另一个Bean做相应处理,也就是监听。 流程: 1)自定义事件,集成ApplicationEvent 2)定义事件监听器,实现ApplicationListener. 3)使用容器发布事件 Spring Aware(Spring设计用来框架内部使用的) Spring Aware的目的是为了让Bean获得Spring容器的服务。因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean集成ApplicationContextAware可以获得Spring容器的所有服务。 多线程 Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor。 实际开发都是异步,因此需要在配置类通过@EnableAsync开启对异步任务的支持。 通过在实际执行的Bean的方法中使用@Async注解来声明其实一个异步任务。 计划任务 通过在配置类注解@EnableScheduling来开启对计划任务的支持,然后再执行计划任务的方法上注解@Scheduled,声明这是计划任务。 Spring通过@Scheduled支持cron、fixDelay、fixRate等多种类型的计划任务 条件注解@Conditional 类似profile,更通用的基于条件的Bean的创建 @Conditional根据满足某一个特定条件创建一个特定的Bean。根据特定条件来控制Bean的创建行为。 组合注解和原注解 元注解:可以注解到别的注解上的注解。 组合注解:被注解的注解 @Enable*注解的工作原理 这些注解都有一个@Import注解,@Import是用来导入配置类的,这就意味着这些自动开启的实现其实是导入一些自动配置的Bean。 导入的配置方式有三种类型: 1.直接导入配置类 2.依据条件选择配置类 3.动态注册Bean 集成测试 为我们提供了一种无须部署或运行程序来完成验证系统各部分是否能正常协同工作的能力。 Spring通过Spring TestContex Framework对集成测试提供顶级支持。它不以来于特定的测试框架,即可食用Junit,也可食用TestNG. Spring提供了一个SpringJUnit4ClassRunner类,它提供了Spring TestContext Framework的功能。通过@ContextConfiguration来配置Application Context,通过@ActiveProfiles确定活动的profile.
Spring MVC提供了一个DispatcherServlet来开发Web应用。Spring MVC里实现WebApplicationInitializer接口便可实现等同于web.xml的配置 Spring Boot页面放置在src/main/resources下 Spring MVC的ViewResolver:这是Spring MVC视图(JSP下就是html)渲染的核心机制; Spring MVC有一个ViewResolver接口,实现这个接口需要重写方法resolveViewName(),返回值是接口View。 View的职责是使用model、request、response对象,并将渲染视图(不一定是html,可能是json、xml、pdf)返回浏览器. Spring MVC常用注解: @Controller注解在类上,表明这个类是Spring MVC里的Controller,将其声明为Spring的一个Bean,Dispatcher Servlet会自动扫描注解了此注解的类,并将Web请求映射到注解了@RequestMapping的方法上。 在Spring MVC声明控制器Bean时,只能使用@Controller. @RequestMapping注解用来映射Web请求(访问路径和参数)、处理类和方法的。@RequestMapping可注解在类或方法上。注解在方法上的@RequestMapping路径会集成注解在类上的路径,@RequestMapping支持Servlet的request和response作为参数,也支持对request和response的媒体类型进行配置。 @ResponseBody支持将返回值放在response体内,而不是返回一个页面。我们在很多基于Ajax程序时,可以以此注解返回数据而不是页面。注解放置在返回值前或方法上。 @RequestBody允许request的参数在request体中,而不是直接链接在地址后面。此注解放置在参数前。 @PathVariable用来接收路径参数,如/news/001,可接收001作为参数,此注解放置在参数前。 @RestController是一个组合注解,组合了@Controller和@ResponseBody,这意味着当开发一个和页面交互数据的控制时,需要使用此注解。 Spring MVC的定制配置需要我们的配置类继承一个WebMvcConfigurerAdapter类,并在此类使用@EnableWebMvc注解,来开启对Spring MVC的配置支持,这样我们可以重写这个类的方法,完成我们的常用配置。 静态资源映射:程序的静态文件(js,css,图片)需要直接访问,我们可以在配置里重写addResourceHandlers方法来实现。 拦截器配置 拦截器(Interceptor)实现对每个请求处理前后进行相关的业务处理,类似Servlet的Filter. 可让普通的Bean实现HanlderInterceptor接口或者继承HanlderInterceptorAdapter类来实现自定义拦截器。 通过重写WebMvcConfigurerAdapter的addInterceptors方法来注册自定义的拦截器。 @ControllerAdvice 通过@ControllerAdvice,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,这对所有注解了@RequestMapping的控制器内的方法有效。 @ExceptionHandler:用于全局处理控制器里的异常。 @InitBinder:用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。 @ModelAttribute:@ModelAttribute本来的作用是绑定键值对到Model里,此处是让全局的@RequestMapping都能获得在此处设置的键值对。 快捷的ViewController 在配置中重写addViewControllers简化页面转向配置,管理更集中 路径匹配参数配置 重写configurePathMatch方法可不忽略“.”后面的参数 Spring MVC通过配置一个MultipartResolver来上传文件 在Spring的控制器中,通过MultipartFile file来接收文件,通过MultipartyFile[] files接收多个文件上传。 自定义HttpMessageConverter:用来处理request和response里的数据。 配置自定义的HttpMessageConverter的Bean,在Spring MVC里注册HttpMessageConverter有两种方法: 1.configureMessageConverters:重载会覆盖掉Spring MVC默认注册的多个HttpMessageConverter 2.extendMessageConverters:仅添加一个自定义的HttpMessageConverter,不覆盖默认注册的HttpMessageConverter 服务端推送技术:当客户端向服务端发送请求,服务端抓住这个请求不放,等有数据更新时才返回客户端,客户端接收后再发送下一个请求。