bean

22-Spring源码解析之AOP(1)——@EnableAspectJAutoProxy注解原理

早过忘川 提交于 2020-03-12 08:54:25
Spring版本: <version>5.2.1.RELEASE</version> 目录 一、`AOP`概览 1. 例子 1.1 创建用于拦截的`Bean` 1.2 切面类 1.3 配置类 1.4 测试类 1.5 测试结果 二、 `@EnableAspectJAutoProxy`注解 三、解析`@EnableAspectJAutoProxy`注解 上一篇: 21-Spring源码解析——IOC容器创建与Bean生命周期总结 截至到本篇文章,我终于把 IOC 写完啦!现在开启 Spring 的第二个百宝箱: AOP 一、 AOP 概览 我们知道,使用 面向对象编程( OOP ) 有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为的时候,例如:日志、安全检测等,我们只有在每个对象里引用公共行为,这样程序中就产生了大量的重复代码,程序就不便于维护了,所以就有了一个对面向对象编程的补充,即 面向切面编程( AOP ) , AOP 所关注的方向是横向的,不同于 OOP 的纵向。 Spring 2.0 采用 @AspectJ 注解对 POJO 进行标注,从而定义了包含 切点信息 和 增强横切逻辑 的切面。 Spring 2.0 将这个切面织入到匹配的目标 Bean 中。 下面,我们先来直观地浏览一下 Spring 中 AOP 的简单示例。 1. 例子 我们这个例子比较纯粹

天猫项目(11)订单管理

帅比萌擦擦* 提交于 2020-03-12 07:11:07
这里主要有两个实体,一个是订单项,是对product的多对一,产品生成多个订单项,一个用户也可以有多个订单项,一个订单也可以有多个订单项,这是对订单项的er图分析,另外一个是订单,一个订单由多个订单项组成,一个用户可以有多个订单,这是对订单的er图分析 然后这里的页面要实现的功能,一个就是查询订单的功能,这个可以靠查询订单的订单项完成,然后根据所有订单项的数据计算出订单的一些书信和;另外一个则是发货功能,这里会记录下订单的很多状态,这里其实最难实现的是这个,也是这个模块的重点 1.pojo OrderItem public class OrderItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private int id; @ManyToOne @JoinColumn(name = "pid") private Product product; @ManyToOne @JoinColumn(name = "oid") private Order order; @ManyToOne @JoinColumn(name = "uid") private User user; private int number; } 没啥可说的,和三个表多对一映射 Order

5.3:从bean的实例中获取对象

醉酒当歌 提交于 2020-03-12 06:27:50
5.3 从 bean 的实例中获取对象   在 getBean 方法中, getObjectForBeanInstance 是个高频率使用的方法,无论是从缓存中获得 bean 还是根据不同的 scope 策略加载 bean 。总之,我们得到 bean 的实例后要做的第一 步就是调用这个方法来检测一下正确性,其实就是用于检测当前 bean 是否是 FactoryBean 类型的 bean ,如果是,那么需要调用该 bean 对应的 FactoryBean 实例中的 getObject() 作为返回值。   无论是从缓存中获取到的 bean 还是通过不同的 scope 策略加载的 bean 都只是最原始的 bean 状态,并不一定是我们最终想要的 bean 。举个例子,假如我们需要对工厂 bean 进行处理,那么这里得到的其实是工厂 bean 的初始状态,但是我们真正需要的是工厂 bean 中定义的 factory-method 方法中返回的 bean ,而 getObjectForBeanInstance 方法就是完成这个工作的。 1 protected Object getObjectForBeanInstance( 2 Object beanInstance, String name, String beanName, RootBeanDefinition mbd) { 3 4

application.xml中配置文件properties导入

南笙酒味 提交于 2020-03-12 06:26:41
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> <value>classpath:sysconfig.properties</value> </list> </property> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">     <property name="location" value="classpath:jdbc_config.properties" /> </bean> 这样之后可以在其中使用properties中的属性,通过${}的方式引入。 来源: https://www.cnblogs.com/eer123/p/9468059.html

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''

一笑奈何 提交于 2020-03-12 03:51:56
异常日志: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘lightShopServiceImpl’: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.xxx.uni.retail2.plus.client.enter. LightShopDecorationService ’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:{@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}

BeanNotOfRequiredTypeException: Bean named \"\" must be of type [] but was actually of type [com.sun.p

百般思念 提交于 2020-03-12 03:30:44
参考链接: https://blog.csdn.net/willy__qi/article/details/89344967 大部分原因都说"原来在定义Service类时,没有用接口,而直接使用的是Service的实现类" 当然我的问题并不是以上这个链接解决的,由于项目中有多个spring配置文件,其中有两个spring配置文件中有重复的bean名,虽然类不相同,但也是报以上错误,这个问题通过排除法才找到的。 如果有源代码谁还反编译?公司前辈的web项目(他比较小气,不给源代码,我只能去tomcat服务器中打包一份全是.class格式的项目),反编译中遇到了一大堆问题,百度了一天,搞到半夜2点多。明天继续 来源: https://www.cnblogs.com/shifu8005/p/12466861.html

Spring基于XML装配Bean

一曲冷凌霜 提交于 2020-03-12 02:28:50
Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式。Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配、基于 Annotation 的 Bean 装配和自动装配等。 Spring 基于 XML 的装配通常采用两种实现方式,即设值注入(Setter Injection)和构造注入(Constructor Injection)。 在 Spring 实例化 Bean 的过程中,首先会调用默认的构造方法实例化 Bean 对象,然后通过 Java 的反射机制调用 setXxx() 方法进行属性的注入。因此, 设值注入要求一个 Bean 的对应类必须满足以下两点要求。 必须提供一个默认的无参构造方法。 必须为需要注入的属性提供对应的 setter 方法。 使用设值注入时,在 Spring 配置文件中,需要使用 元素的子元素 元素为每个属性注入值。而使用构造注入时,在配置文件中,主要使用 标签定义构造方法的参数,可以使用其 value 属性(或子元素)设置该参数的值。 示例基于 XML 方式的 Bean 的装配。 1. 创建 Person 类 在项目 spring中的 src 目录下,创建一个名称为 com.zsh 的包,在该包下创建一个 Person 类,如下所示。 package com . zsh ;

Spring Aware接口执行时机源码深度解读

我只是一个虾纸丫 提交于 2020-03-12 02:17:17
Spring Aware接口执行时机源码深度解读 Spring中有这样一种标记接口的存在Aware,只要是spring管理的bean实现了Aware接口,那么spring就会在bean创建的某个时机将相应的资源注入到该spring bean中,比如ApplicationContextAware, 会将spring 应用上下文ApplicationContext自动注入到bean中。 //Spring Aware标记接口 public interface Aware { } Spring内建的Aware接口 Spring 内建的Aware大概分为以下几种 Spring core 和 context的内建Aware接口 ApplicationEventPublisherAware MessageSourceAware ResourceLoaderAware BeanFactoryAware EnvironmentAware EmbeddedValueResolverAware ImportAware LoadTimeWeaverAware BeanClassLoaderAware BeanNameAware ApplicationContextAware Spring web内建的Aware接口 ServletContextAware ServletConfigAware

Spring5 中 Redis 配置

前提是你 提交于 2020-03-12 00:32:17
本人喜欢用Spring的xml配置+注解的方式搭建Web项目,SpringBoot虽然很流行很简单但是我总感觉太臃肿...比如打包后的lib一大堆...就因为自动化配置把所有可能需要的依赖全部搞进去了,对于有强迫症的我有点受不了,总感觉项目不干净。。。 技术更新太快了要跟上。。。 Redis的Maven引用 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.2.4.RELEASE</version> </dependency> Redis的配置 <!-- redis配置 --> <!--初始化连接池配置--> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}"/> <property name=

学生管理系统(SSM简易版)总结

巧了我就是萌 提交于 2020-03-11 16:34:25
之前用 Servlet + JSP 实现了一个 简易版的学生管理系统 ,在学习了 SSM 框架之后,我们来对之前写过的项目重构一下! 技术准备 为了完成这个项目,需要掌握如下技术: Java 基础知识 前端: HTML, CSS, JAVASCRIPT, JQUERY J2EE: Tomcat, Servlet, JSP, Filter 框架: Spring , Spring MVC , MyBatis , Spring 与 MyBatis 整合 , SSM 整合 数据库: MySQL 开发工具: IDEA, Maven 开发流程 之前虽然已经使用 Servlet + JSP 完成了简单的开发,这次使用 SSM 仅仅是重构工作,但我们仍然按照商业项目的开发步骤来一步一步完成,进一步熟悉这个过程, 重复的部分我就直接复制了。 ① 需求分析 首先要确定要做哪些功能 使用 数据库 来 保存数据 能 增删改查 学生的信息 (学号,名称,年龄,性别,出生日期) ② 表结构设计 根据需求,那么只需要一个 student 表就能够完成功能了。 创建数据库:student 将数据库编码格式设置为 UTF-8 ,便于存取中文数据 DROP DATABASE IF EXISTS student; CREATE DATABASE student DEFAULT CHARACTER SET utf8;