bean

【Spring】AOP注解方式实现机制

坚强是说给别人听的谎言 提交于 2020-02-29 01:15:00
一、概述 二、@EnableAspectJAutoProxy 注解分析 三、分析AnnotationAwareAspectJAutoProxyCreator 四、执行流程 1. registerBeanPostProcessors() 2. finishBeanFactoryInitialization() 3. InstantiationAwareBeanPostProcessor后置处理器的执行逻辑 4. 目标方法执行 第一部分,得到拦截器链 第二部分,拦截器链的触发过程 总结 一、概述 在Spring AOP 中: AnnotationAwareAspectJAutoProxyCreator 是基于Bean中的 AspectJ 注解来实现自动代理,在Bean创建的过程中完成对切入点的增强。 Spring AOP 的其他实现方式可以查看 【Spring】 AOP Base 对于 Spring AOP 使用注解的方式中,我们配置开启AOP注解 可以用XML的方式: <!-- 自动生成代理 底层就是AnnotationAwareAspectJAutoProxyCreator --> <aop:aspectj-autoproxy /> 或者用注解的方式 在配置类上标注 @EnableAspectJAutoProxy 注解 import org.springframework

【Spring】25、Spring代理。 BeanNameAutoProxyCreator 与 ProxyFactoryBean

折月煮酒 提交于 2020-02-29 00:37:00
一般我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的编写带来繁重的工作,这时就该BeanNameAutoProxyCreator出场了。 (一)ProxyFactoryBean属性介绍 target:代理的目标类 proxyInterfaces:代理类应该实现的接口列表 interceptorNames:需要应用到目标对象上的通知Bean的名字.可以是拦截器,advisor和其他通知类型的名字。这个属性必须按照在BeanFactory中的顺序设置 singleton:单例 aopProxyFactory:使用的ProxyFactoryBean实现。Spring带有两种实现(JDK动态代理和CGLIB)。通常不需要使用这个属性 exposeProxy:目标对象是否需要得到当前的代理。通过调用AopContext.getCurrentProxy实现。 frozen:一旦工厂被创建,是否可以修改代理的通知。当设置为true时,在运行时就不能修改ProxyFactoryBean了。通常不需要使用这个属性。 optimize:是否对创建的代理进行优化(只适用于CGLIB) ProxyTargetClass:是否代理目标类,而不是实现接口

spring学习——Ioc基础三(Ioc配置使用)

纵饮孤独 提交于 2020-02-28 22:51:13
一、XML配置的结构 一般配置文件结构如下: <beans> <import resource=”resource1.xml”/> <bean id=”bean1”class=””></bean> <bean id=”bean2”class=””></bean> <bean name=”bean2”class=””></bean> <alias alias="bean3" name="bean2"/> <import resource=”resource2.xml”/> </beans> 1、<bean>标签主要用来进行Bean定义; 2、alias用于定义Bean别名的; 3、import用于导入其他配置文件的Bean定义,这是为了加载多个配置文件,当然也可以把这些配置文件构造为一个数组(new String[] {“config1.xml”, config2.xml})传给ApplicationContext实现进行加载多个配置文件,那一个更适合由用户决定;这两种方式都是通过调用Bean Definition Reader 读取Bean定义,内部实现没有任何区别。<import>标签可以放在<beans>下的任何位置,没有顺序关系。 二、Bean的配置 Spring IoC容器目的就是管理Bean,这些Bean将根据配置文件中的Bean定义进行创建

大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)

 ̄綄美尐妖づ 提交于 2020-02-28 22:47:50
大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)案例分享 现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration 替换标签的做法。一行 简单的注解就可以解决很多事情。但是,其实每一个注解背后都有很多值得学习和思考的内容。这 些思考的点也是很多大厂面试官喜欢问的内容。 @Configuration处理类:org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition @Bean处理类:org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition · 项目包结构 F:. ├─java │ └─com │ └─example │ └─demo4 │ │ Demo4Application.java │ │ │ ├─configuration │ │ PersonConfiguration.java │ │ StuConfiguration.java │ │ │ ├─controll │ │ StuController.java │ │ │ ├─dao │ │ StuDao

http://spring.oschina.mopaas.com/html_en/

这一生的挚爱 提交于 2020-02-28 22:26:56
Spring Framework Reference Documentation Next Spring Framework Reference Documentation Authors Rod Johnson , Juergen Hoeller , Keith Donald , Colin Sampaleanu , Rob Harrop , Thomas Risberg , Alef Arendsen , Darren Davison , Dmitriy Kopylenko , Mark Pollack ,Thierry Templier , Erwin Vervaet , Portia Tung , Ben Hale , Adrian Colyer , John Lewis , Costin Leau , Mark Fisher , Sam Brannen , Ramnivas Laddad , Arjen Poutsma ,Chris Beams , Tareq Abedrabbo , Andy Clement , Dave Syer , Oliver Gierke , Rossen Stoyanchev , Phillip Webb , Rob Winch , Brian Clozel , Stephane Nicoll , SebastienDeleuze 4.1.3

搭建spring mvc + maven + hibernate

∥☆過路亽.° 提交于 2020-02-28 15:28:21
一、项目pom.xml文件引入的Jar包配置,可以通过maven库查到相关配置 maven库访问地址: http://maven.oschina.net/index.html#nexus-search;quick~ 二、配置文件 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.rayoo</groupId> <artifactId>my-springmvc</artifactId> <version>1.0-RELEASE</version> <packaging>war</packaging> <!-- 公用属性声明 --> <properties> <project.encoding>UTF-8</project.encoding> <spring.version>3.1.0.RELEASE</spring

通过 ApplicationContext 发布 TestApplicationEvent 事件

杀马特。学长 韩版系。学妹 提交于 2020-02-28 14:07:41
Spring 提供了非常多的扩展接口,官方将这些接口称之为钩子,这些钩子会在特定的时间被回调,以此来增强 Spring 功能,众多优秀的框架也是通过扩展这些接口,来实现自身特定的功能,如 SpringBoot、mybatis 等。 1、Aware 系列接口 Aware 从字面意思理解就是“知道”、“感知”的意思,是用来获取 Spring 内部对象的接口。A ware 自身是一 个顶级接口,它有一系列子接口,在一个 Bean 中实现这些子接口并重写里面的 set 方法后,Spring 容器启动时,就会回调该 set 方法,而相应的对象会通过方法参数传递进去。我们以其中的 ApplicationContextAware 接口为例。 ApplicationContextAware 大部分 Aware 系列接口都有一个规律,它们以对象名称为前缀,获取的就是该对象,所以 ApplicationContextAware 获取的对象是 ApplicationContext 。 public interface ApplicationContextAware extends Aware { void setApplicationContext(ApplicationContext applicationContext) throws BeansException; }

spring aop 及实现方式

梦想的初衷 提交于 2020-02-28 13:50:16
一、AOP的基本概念: 1、什么是aop: AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。 在不改变原有的逻辑的基础上,增加一些额外的功能。代理也是这个功能,读写分离也能用aop来做。 AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度

Spring(七)核心容器 - 钩子接口

天涯浪子 提交于 2020-02-28 09:59:23
目录 前言 1、Aware 系列接口 2、InitializingBean 3、BeanPostProcessor 4、BeanFactoryPostProcessor 5、ImportSelector 6、ImportBeanDefinitionRegistrar 7、FactoryBean 8、ApplicationListener 最后 前言 Spring 提供了非常多的扩展接口,官方将这些接口称之为钩子,这些钩子会在特定的时间被回调,以此来增强 Spring 功能,众多优秀的框架也是通过扩展这些接口,来实现自身特定的功能,如 SpringBoot、mybatis 等。 1、Aware 系列接口 Aware 从字面意思理解就是“知道”、“感知”的意思,是用来获取 Spring 内部对象的接口。Aware 自身是一个顶级接口,它有一系列子接口,在一个 Bean 中实现这些子接口并重写里面的 set 方法后,Spring 容器启动时,就会回调该 set 方法,而相应的对象会通过方法参数传递进去。我们以其中的 ApplicationContextAware 接口为例。 ApplicationContextAware 大部分 Aware 系列接口都有一个规律,它们以对象名称为前缀,获取的就是该对象,所以 ApplicationContextAware 获取的对象是

Spring 配置解析之Properties

拟墨画扇 提交于 2020-02-28 07:55:17
1.简单示例: SpringBoot中的的配置简单属性类支持ConfigurationProperties方式,看一个简单的示例。 1 @ConfigurationProperties(prefix = "org.dragonfei.demo") 2 public class DemoProperties { 3 private String name; 4 private String password; 5 private String test; 6 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 public String getPassword() { 16 return password; 17 } 18 19 public void setPassword(String password) { 20 this.password = password; 21 } 22 23 public String getTest() { 24 return test; 25 } 26 27 public void setTest(String test) { 28 this.test =