aop

spring creates proxy for wrong classes when using aop class level annotation

社会主义新天地 提交于 2020-05-20 23:06:42
问题 When using spring AOP with class level annotations, spring context.getBean seems to always create and return a proxy or interceptor for every class, wether they have the annotation or not. This behavior is only for class level annotation. For method level annotations, or execution pointcuts, if there is no need for interception, getBean returns a POJO. Is this a bug? As designed? Or am i doing something wrong? @Component @Aspect public class AspectA { @Around("@target(myAnnotation)") public

Spring MVC 多数据源实践

一世执手 提交于 2020-04-27 03:03:58
数据库情况:A数据库(oracle)+B数据库(Mysql) 一、applicationContext.xml配置 <!-- A库 --> <bean id="dataSourceA" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> ………… </bean> <!-- B库 --> <bean id="dataSourceB" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> ………… </bean> <!-- 动态数据源 --> <bean id="dynamicDataSource" class="edu.portal.demo.dataSource.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry key="dbA" value-ref="dataSourceA" /> <entry key="dbB" value-ref="dataSourceB" /> </map> </property> <property name=

JAVA自定义注解SpringAOP

。_饼干妹妹 提交于 2020-04-17 04:25:12
【推荐阅读】微服务还能火多久?>>> 前言:Annotation(注解)是JDK5.0及以后版本引入的,它的作用就是负责注解其他注解。现在开发过程中大家都已经放弃了传统的XML配置的方式改为注解的方式,既简单又简洁,方便管理和维护。目前引用第三方jar包的注解都是解决技术上的问题,然而我们在工作中也需要通过注解解决业务上的一些问题,所以就得用到自定义注解。 1.自定义一个注解 创建一个 @interface的文件,则表示这是一个注解类 /* * 自定义注解 */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface SecureValid { String desc() default "身份和安全验证开始..."; } 2.注解的属性描述 2.1 @Target 用于描述注解的使用范围(即:被描述的注解可以用在什么地方),其取值有: ElementType.CONSTRUCTOR 用于描述构造器。 ElementType.FIELD 用于描述域。 ElementType.LOCAL_VARIABLE 用于描述局部变量 ElementType.METHOD 用于描述方法 ElementType.PACKAGE 用于描述包

基于maven项目的SSM整合

狂风中的少年 提交于 2020-04-08 09:41:43
1.添加基本的依赖坐标(项目如需有具体别的依赖,根据实际情况添加) 1 <!-- 统一管理jar包版本 --> 2 <properties> 3 <spring.version>5.0.2.RELEASE</spring.version> 4 <slf4j.version>1.6.6</slf4j.version> 5 <log4j.version>1.2.12</log4j.version> 6 <shiro.version>1.2.3</shiro.version> 7 <mysql.version>5.1.6</mysql.version> 8 <mybatis.version>3.4.5</mybatis.version> 9 <spring.security.version>5.0.1.RELEASE</spring.security.version> 10 </properties> 11 <!-- 锁定jar包版本 --> 12 <dependencyManagement> 13 <dependencies> 14 <dependency> 15 <groupId>org.springframework</groupId> 16 <artifactId>spring-context</artifactId> 17 <version>${spring.version}<

31、最简单的mvc框架tiny,增加Ioc,jdbc工具类(1个类),连接池(1个类)

允我心安 提交于 2020-04-07 05:31:27
Ioc 按照mvc,我们需要把tiny分成3层,其中视图(Renderer抽象类)和Action我们已经在前面实现了,这次我们用最少的代码实现Model。 model沿用Action的想法,用户自定义类,类名必须以Model结尾,同Action一样在初始化时放入Container容器内。model就是数据模型,我们这里充血模型,model的类名默认是同数据库的表名做关联的,即类名去掉Model后(转为小写)为表明,这样一对一映射,有时会简单很多,如保存和查询单个表时,当然了你可以传入复杂sql,返回的结果有基本类型、map、list等。 model里需要访问数据库时,我们设计了DbUtil工具类,建议在model里使用,当然了这个还是看你, DbUtil本身没有限制。model是通过ioc注入进来的,在你访问这个action前。下面代码中的Container.inject(o);为容器向action中注入model实例。 Map<String,String> args = this.converter(req.getParameterMap()); String key = UUID.randomUUID().toString(); Container.inject(o); this.before(routes,args,key); Object result = o

30、最简单的mvc框架tiny,增加Aop

偶尔善良 提交于 2020-04-07 05:31:05
最简单的mvc框架tiny,增加Aop功能。 增加Aop接口,使用是实现即可。 然后设置路由(访问的action)和aop的绑定信息,类似如下: 下面的意思是把路由"/TinyTest/hello/"和TestAop.class做绑定,这样执行类TinyTestAction的hello方法时,就会自动执行 TestAop的before和after方法。 下面的BindingAop 的init方法,需要自己设置。系统启动时会自动读取。 public class BindingAop { public static void init(){ BindingUtil.binding("/TinyTest/hello/", new Class[]{TestAop.class}); BindingUtil.binding("/TinyTest/*", new Class[]{TestAop2.class}); } } Aop.java package tiny; import java.util.Map; public interface Aop { void before(Map<String,String> args); void after(Map<String,String> args); } BindingAop.java package tiny; import web

学习Spring(九) -- Spring使用AOP

二次信任 提交于 2020-04-06 22:04:09
AOP通知 Spring中常用的AOP通知有五种: 前置通知:在某方法调用之前执行; 后置通知:在后方法调用之后执行; 异常通知:在某方法发生异常时执行; 返回通知:在某方法进行返回时执行; 环绕通知:可手动进行控制以上四种通知的执行; AOP配置 加入一下spring的jar包: 配置文件中引入xmlns:aop,加入<aop:aspectj-autoproxy></aop:aspectj-autoproxy>,具体配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xsi

Spring AOP注解快速入门

与世无争的帅哥 提交于 2020-04-06 02:35:43
1、引入spring坐标、aspectj坐标、junit坐标、spring-test坐标 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.3.RELEASE</version></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.3</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.3.RELEASE</version></dependency><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version></dependency> 2、编写接口类 public interface TargetInterface { public void

Spring之基于XML配置切面

落爺英雄遲暮 提交于 2020-04-05 22:18:24
① public interface Cacl { int add(int i,int j); int sub(int i,int j); int mul(int i,int j); int div(int i,int j); } ② import org.springframework.stereotype.Component; @Component public class CaclImpl implements Cacl { @Override public int add(int i, int j) { // TODO Auto-generated method stub int result = i+j; return result; } @Override public int sub(int i, int j) { // TODO Auto-generated method stub int result = i-j; return result; } @Override public int mul(int i, int j) { // TODO Auto-generated method stub int result = i*j; return result; } @Override public int div(int i, int j) { // TODO

Spring AOP+注解 实现完美日志记录

走远了吗. 提交于 2020-04-05 21:50:44
Spring IOC 及其 AOP是其两大核心功能,本篇介绍下AOP的相关实际知识和实际应用。下面先简单介绍下aop的概念和基础使用。 一、基本介绍 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使用"横切"技术,AOP把软件系统分为两个部分: 核心关注点 和 横切关注点 。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。业务处理的代码完全不知道他会被代理,他也不清楚自己在执行前后会发生什么事情。 核心关注点 和 横切关注点 是完全不相干的两种的处理方式。 AOP核心概念 1、横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点 2、切面