1.文件目录:

2.实体类

package com.wangcf.po;

public class User {
private int id;
private String name;
private String password; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

3.接口:

package com.wangcf.manager;

import com.wangcf.po.User;

public interface IUserManager {

    public void addUser();

    public void addUser(User user);
public void delUser(int uid); public User modifyUser(User user);
}

4.实现类:

package com.wangcf.manager;

import com.wangcf.po.User;

public class UserManagerImp implements IUserManager{

    @Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("UserManagerImp addUser..");
} @Override
public void delUser(int uid) {
// TODO Auto-generated method stub
System.out.println("UserManagerImp delUser..");
} @Override
public User modifyUser(User user) {
// TODO Auto-generated method stub
user.setName(user.getName()+",修改后的");
System.out.println("UserManagerImp modifyUser..");
return null;
} @Override
public void addUser(User user) {
// TODO Auto-generated method stub
System.out.println("UserManagerImp addUser(User user)...");
} }

5.切面:

package com.wangcf.manager.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before; @Aspect
/**
* 切面类
* @author fan
*
*/
public class LogManager {
@Before("execution(public void com.wangcf.manager.UserManagerImp.addUser())")
/*addUser(..)表示带参数或不带参数
* add*() 可以用通配符进行修饰
* execution为切入点的指示符,还有其他的
* advice(通知)
*/
public static void addLogBefore(){
System.out.println("添加日志 Before...");
} @After("execution(* com.wangcf.manager.*.*(..))")
public void addLogAfter(){
System.out.println("添加日志记录 After...");
} @AfterReturning("execution(* com.wangcf.manager.*.*(..))")
public void addLogAfterReturning(){
System.out.println("添加日志记录 AfterReturning...");
} @AfterThrowing("execution(* com.wangcf.manager.*.*(..))")
public void addLogAfterThrowing(){
System.out.println("添加日志记录 AfterThrowing...");
} @Around("execution(* com.wangcf.manager.*.*(..))")
public void addLogAround(JoinPoint joinPoint){
System.out.println("添加日志记录 AfterAround start...");
System.out.println(joinPoint.getTarget());
System.out.println("添加日志记录 AfterAround end...");
}
}

6.测试类:

package com.wangcf.test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.wangcf.manager.IUserManager;
import com.wangcf.po.User; public class TestAction {
public static void main(String[] args) {
BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserManager userManager=(IUserManager) factory.getBean("userManager");
userManager.addUser();
System.out.println("=================");
User user=new User();
user.setName("张三") ;
userManager.addUser(user);
System.out.println("========");
userManager.modifyUser(null);
}
}

7.xml配置

<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <bean name="userManager" class="com.wangcf.manager.UserManagerImp"/>
<bean name="logManager" class="com.wangcf.manager.aspect.LogManager"/>
<!--启用AspectJ的支持 -->
<aop:aspectj-autoproxy/>
</beans>

8.输出

9.总结:

在xml配置中会生成代理类

在使用SpringAOP的时候,业务类需要实现接口,不然就需要使用CGLIB生成目标对象的代理类

Spring会自动选择用何种方式处理代理:

1.JDK动态代理:当目标对象实现了接口的时候

2.CGLIB的代理:当目标对象没有实现接口的时候

可以强制使用CGLIB来生成代理:

<aop:aspectj-autoproxy proxy-target-class="true"/>

AOP:spring 的Annotation配置的更多相关文章

  1. 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式

    转自:http://www.cnblogs.com/jbelial/archive/2012/07/20/2539123.html AOP(Aspect Orient Programming ) , ...

  2. 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置

    在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...

  3. spring集成mybatis配置多个数据源,通过aop自动切换

    spring集成mybatis,配置多个数据源并自动切换. spring-mybatis.xml如下: <?xml version="1.0" encoding=" ...

  4. 18-spring学习-利用Annotation配置AOP

    之前是通过配置完成aop操作,如果自己写的话,太麻烦了,可以使用基于annotation的配置完成. 第一步:打开AOP的annotation支持 加上一句话: <context:annotat ...

  5. Spring AOP源码分析(二):AOP的三种配置方式与内部解析实现

    AOP配置 在应用代码中,可以通过在spring的XML配置文件applicationContext.xml或者基于注解方式来配置AOP.AOP配置的核心元素为:pointcut,advisor,as ...

  6. JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架

    1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...

  7. spring框架中AOP思想与各种配置详解

    Spring中提供两种AOP支持:   1.基于代理的经典AOP   2.Aspectj注解配置AOP    首先我们先了解什么是AOP,AOP(Aspect Oriented Programming ...

  8. java 实现类似spring的可配置的AOP框架

    一.工厂类BeanFactory: 1.工厂类BeanFactory负责创建目标类或代理类的实例对象,并通过配置文件实现切换. 2.getBean方法根据参数字符串返回一个相应的实例对象,如果参数字符 ...

  9. Spring MVC 事务配置

    Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一.      XML,使用tx标签配置拦截器实现事务 一.   ...

随机推荐

  1. shell习题第8题:监控nginx的502状态

    [题目要求] 服务器上跑的是LNMP环境,近期总是有502现象.502为网站访问的状态码,200正常,502错误是nginx最为普遍的错误状态码. 由于502只是暂时的,并且只要一重启php-fpm服 ...

  2. HTML5纯Web前端也能开发直播,不用开发服务器(使用face2face)

    前段时间转载了某位大神的一篇文章,开发Web版一对一远程直播教室只需30分钟 - 使用face2face网络教室.非常有意思.看起来非常简单,但作为一名前端开发人员来说,还是有难度.因为要开发服务器端 ...

  3. go语言 os.Rename() cannot move the file to a different disk drive 怎么办

    时值我小病在家休养生息,喜欢跳广场舞的外公来寻求我的帮助,他们跳广场舞是将存有歌曲的U盘插到音响上面,而音响大部分都是只能显示歌曲的索引index,不能直接显示歌曲名,所以为了方便他们会在U盘里面对歌 ...

  4. POJ_1679_The Unique MST(次小生成树)

    Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definit ...

  5. 记账本APP(2)

    今天下载了Hbuiler,生成了一个记账本APP,目前里面只可以 输入今日消费 明天将会做出来记录以及计算总额于月消费.

  6. AWT之—画图

    package edu.ch4; import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.util.C ...

  7. 20155209 2016-2017-2 《Java程序设计》第二周学习总结

    20155209 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 类型总结:常用定义byte(符号%d):short(符号%d):int(符号%d):long ...

  8. 20155218 2016-2017-2 《Java程序设计》第9周学习总结

    20155218 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC全名Java DataBase Connectivity,是java联机数据库的标准 ...

  9. 20155231 实验二 Java面向对象程序设计

    20155231 java实验一 Java开发环境的熟悉 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 完成实验.撰写实验 ...

  10. 20155232 2016-2017-3 《Java程序设计》第10周学习总结

    20155232 2016-2017-3 <Java程序设计>第10周学习总结 教材学习内容总结 计算机网络 路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控制等,通 ...