spring自定义注解

Java Web-Spring框架(二)

你说的曾经没有我的故事 提交于 2020-01-19 00:07:39
1、后处理 bean 对一个bean生效 2、注解和xml混合使用 a、将所有的 bean 都配置在 xml 中,<bean id="" class="" b、将所有的依赖都使用注解,@Autowired,默认不生效。为了生效,需要在xml中配置:<context:annotation-config,如图: 上图中,两个注解一般不一起使用,“注解1”扫描含有注解(@Component等)类,注入注解也会自动生效。“注解2”只在xml和注解(注入)混合使用时,使注入注解生效。 3、AOP 3.1、AOP介绍 AOP(Aspect Oriented Programming),面向切面编程。通过预编译方式和运动期动态代理实现程序功能的统一维护的一种技术。是OOP(面向对象编程)的延续,采取 横向抽取 机制,取代了传统 纵向继承 体系重复性代码。如图: 经典应用:事务管理、性能监视、安全检查、缓存、日志等。 Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。 AOP实现原理 AOP底层将采用代理机制进行实现。 接口 + 实现类:spring采用 jdk的 动态代理 Proxy 实现类:spring采用 cglib字节码增强 AOP术语【掌握】 target:目标类,需要被代理的类。例如:UserService

Spring3.1新属性管理API:PropertySource、Environment、Profile

拥有回忆 提交于 2020-01-18 09:52:16
转自: https://jinnianshilongnian.iteye.com/blog/2000183 Spring3.1提供了新的属性管理API,而且功能非常强大且很完善,对于一些属性配置信息都应该使用新的API来管理。虽然现在Spring已经到4版本了,这篇文章来的晚点。 新的属性管理API PropertySource :属性源,key-value属性对抽象,比如用于配置数据 PropertyResolver :属性解析器,用于解析相应key的value Environment :环境,本身是一个PropertyResolver,但是提供了Profile特性,即可以根据环境得到相应数据(即激活不同的Profile,可以得到不同的属性数据,比如用于多环境场景的配置(正式机、测试机、开发机DataSource配置)) Profile :剖面,只有激活的剖面的组件/配置才会注册到Spring容器,类似于maven中profile 也就是说,新的API主要从配置属性、解析属性、不同环境解析不同的属性、激活哪些组件/配置进行注册这几个方面进行了重新设计,使得API的目的更加清晰,而且功能更加强大。 PropertySource key-value对,API如下所示: Java代码 public String getName() //属性源的名字 public T getSource

Spring Boot 配置文件探索

纵然是瞬间 提交于 2020-01-18 05:10:07
Spring Boot 配置文件探索 文章目录 Spring Boot 配置文件探索 定位 查看SpringBootApplication注解 查看AutoConfigurationImportSelector类 定位 SpringBootApplication注解位于**Application.java对应类名上方(一般是自动生成) 按住Ctrl并单击注解,跳转至SpringBootApplication注解 查看SpringBootApplication注解 查看源码后,大部分与Spring的自定义设置无关 不过最上方的@EnableAutoConfiguration注解引起了我的注意,按住Ctrl,鼠标点进去,跳转到下图所示 除了Import没有什么特殊的地方,跟进AutoConfigurationImportSelector.class 查看AutoConfigurationImportSelector类 这里,跳转到了Spring的包内,点击上方package,找到当前目录结构,会发现有个spring-configuration-metadata.json文件 双击打开,是一个json文件,有很多的配置信息 搜索一下“server.port”,对应如下json信息 没错,这就是内置服务器的端口:8080,这个json文件就是SpringBoot用于默认配置的。

Spring中的Aop的理解

自作多情 提交于 2020-01-17 05:20:24
也是闲来无事,所有从头再把Spring 实战通读一下。 1.介绍面向切面编程的原理。 2.通过POJO创建切面。 3.使用注解@AspectJ。 4为切面注入依赖。 下面主要围绕上面这四点开始介绍 首先,切面能帮助我们做什么? 专业一点就是可以帮助我们模块化横切关注点。【 横切关注点 】描述为影响应用多处的功能。(安全,事务,其他,等) 划分多个模块,每个模块的核心都需要为特定的业务领域提供服务,但是这些模块也都需要类似的辅助功能。 想要重用这些功能的话,常见的就是面向对象的继承(inheritance)和委托(delegation)。 切面提供了取代继承和委托的另一种可选方案。 在使用面向切面编程时,我们还是在一个地方定义通用的功能,但是可以通过声明的方式定义这个功能要以何种方式在何处应用。 而无需修改受影响的类。横切关注点可以模块化为一个特殊的类,这些类又被称为 切面(aspect) [ 这样做的好处就是,现在的每个关注点都集中在了一个地方。而不是分散到多处代码中。降低了耦合,再者就是简洁,它们这些类只包含关注点的代码,二次要的关注点代码被转移到了切面中。 ] Aop 相关术语 通知(Advice)定义了切面是什么以及什么时候使用。   前置通知(Before):在目标方法被调用之前调用通知功能   后置通知(After):在目标方法完成之后调用通知

Spring Boot 2 实战: 自定义 Servlet Filter 的两种方式

拜拜、爱过 提交于 2020-01-17 02:13:55
1.前言 有些时候我们需要在 Spring Boot Servlet Web 应用中声明一些自定义的 Servlet Filter 来处理一些逻辑。比如简单的权限系统、请求头过滤、防止 XSS 攻击等。本篇将讲解如何在 Spring Boot 应用中声明自定义 Servlet Filter 以及定义它们各自的作用域和顺序。 2. 自定义 Filter 可能有人说声明 Servlet Filter 不就是实现 Filter 接口嘛,没有什么好讲的!是的这个没错,但是很多时候我们并不想我们声明的 Filter 作用于全部的请求。甚至当一个请求经过多个 Filter 时需要按照既定的顺序执行。接下来我会一一讲解如何实现以上的功能。 2.1 Filter 的声明 在 Spring Boot 中 只需要声明一个实现 javax.servlet.Filter 接口的 Spring Bean 就可以了。如下: @Configuration public class FilterConfig { @Bean public Filter requestFilter() { return (request, response, chain) -> { //todo your business }; } @Bean public Filter responseFilter() { return

SpringMVC_入门项目

試著忘記壹切 提交于 2020-01-16 03:16:01
本项目是SpringMVC的入门项目,用于演示SpringMVC的项目配置、各层结构,功能较简单 一、Eclipse中创建maven项目 二、pom.xml添加依赖 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 27 28 29 30 31 32 < dependency > < groupId >javax.servlet</ groupId > < artifactId >javax.servlet-api</ artifactId > < version >3.1.0</ version > </ dependency > < dependency > < groupId >javax.servlet.jsp</ groupId > < artifactId >jsp-api</ artifactId > < version >2.2</ version > </ dependency > <!--① 依赖的Spring模块类库 --> < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-context</ artifactId > < version >3.1.1.RELEASE

SpringBean的生命周期

旧时模样 提交于 2020-01-16 02:31:22
SpringBena的生命周期 Spring对bean进行实例化,调用Bean的构造参数 调用bean的set方法将属性注入到bean的属性 检查bean是否实现beanNameaware,beanFactoryAware 当经过上述几个步骤后,bean对象已经被正确构造,但如果你想要对象被使用前再进行一些自定义的处理,就可以通过BeanPostProcessor接口实现。 该接口提供了两个函数:postProcessBeforeInitialzation( Object bean, String beanName ) 当前正在初始化的bean对象会被传递进来,我们就可以对这个bean作任何处理。 这个函数会先于InitialzationBean执行,因此称为前置处理。 所有Aware接口的注入就是在这一步完成的。postProcessAfterInitialzation( Object bean, String beanName ) 当前正在初始化的bean对象会被传递进来,我们就可以对这个bean作任何处理。 这个函数会在InitialzationBean完成后执行,因此称为后置处理。 查询是否实现benaPostProcessor

[Java复习] 面试突击 - Spring

微笑、不失礼 提交于 2020-01-15 12:06:25
说说你对Spring 的IoC 机制 的理解? 没有Spring之前: 写一套系统,web服务器,tomcat,一旦启动之后,他就可以监听一个端口号的http请求,然后可以把请求转交给你的servlet,jsp,配合起来使用的,servlet处理请求。 比如在我们的一个tomcat + servlet的这样的一个系统里,有几十个地方,都是直接用MyService myService = new MyServiceImpl(),直接创建、引用和依赖了一个MyServiceImpl这样的一个类的对象。 这个系统里,有几十个地方,都跟MyServiceImpl类直接耦合在一起了。 如果我现在不想要用MyServiceImpl了,我们希望用的是NewServiceManagerImpl,implements MyService这个接口的,所有的实现逻辑都不同了,此时我们很麻烦,我们需要在系统里,几十个地方,都去修改对应的MyServiceImpl这个类,切换为NewServiceManagerImpl这个类。 改动代码成本很大,改动完以后的测试的成本很大,改动的过程中可能很复杂,出现一些bug,此时就会很痛苦。 归根结底,代码里, 各种类之间完全耦合在一起,出现任何一丁点的变动,都需要改动大量的代码 ,重新测试,可能还会有bug。 有Spring之后: Spring IoC,

Spring Framework--AOP(1)--

蹲街弑〆低调 提交于 2020-01-15 04:25:09
一、简介 AOP(Aspect-Oriented Programming,即面向切面程序设计),提供了另外一种有关程序结构的思维方式,是OOP(面向对象程序设计)的补充。 OOP的模块化单元是类,AOP的模块化单元是切面。切面可以模块化横切多个类或者对象的关注点,比如事务管理,这些关注点在AOP的词汇里,我们称之为横切关注点(crosscutting concerns). Spring的AOP框架是Spring最重要的组件之一,虽然Spring的Ioc不依赖于AOP(这意味着你如果不需要AOP你可以不用它),但是AOP是Ioc的补充,它们一起可以提供强大的中间件解决方案。 Spring框架使用AOP可以: (1)提供声明式的企业服务,作为EJB声明式企业服务的替代方案。其中最重要的一个服务就是声明式事务管理。 (2)作为OOP的重要补充,允许用户实现自定义的切面。 1、AOP相关概念 首先来认识AOP中的一些核心概念和术语,这些术语并不是特定于Spring框架的。AOP的这些术语不是很直观,比较不好理解。 (1)Aspect(切面):对横切多个类的关注点的模块化,事务管理是个很好的例子。在Spring AOP中,切面是通过常规的类(基于schema的方式)或者带有@Aspect注解的常规类(@AspectJ方式)来实现的。 (2)Join point(连接点):程序执行中的一个点

杭-Spring/Spring MVC

回眸只為那壹抹淺笑 提交于 2020-01-14 08:56:34
Spring 1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? 答:1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA