Spring面向切面编程(二)简单AOP实例

简单实现一个用户登陆的功能,在用户登陆之前进行日志打印,用户登陆之后进行登陆成功日志打印。

Maven添加Spring jar

spring面向切面编程(一)AOP术语

添加Spring AOP的jar

参考:Maven添加Spring jar

还需添加:

  

创建User类:

package com.user;

public class User
{
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

创建IUserDao:

package com.user;

public interface IUserDo
{
    public void userLogin(User user);
}

创建UserDao:

package com.user;

public class UserDao  implements IUserDo{    public void userLogin(User user)    {        // 添加登陆的具体实现,这里只做个例子        System.out.println("User login business");    }}

创建UserService接口:

package com.user;

public interface UserService
{
    public void userLogin(User user);
}

创捷接口实现UserServiceImp:

package com.user;

public class UserServiceImp implements UserService {

       UserDao userDao;        public void userLogin(User user)        {            userDao.userLogin(user);        }        public UserDao getUserDao() {            return userDao;        }        public void setUserDao(UserDao userDao) {            this.userDao = userDao;        }}

创建日志打印类LoginLog:

package com.user;

public class LoginLog
{
    public void loginLogBefore()
    {
        System.out.println("login before");
    }
    public void loginLogAfter()
    {
        System.out.println("login after");
    }
}

创建Spring配置文件User.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.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

    <bean id="userDao" class="com.user.UserDao"></bean>

    <bean id="userService" class="com.user.UserServiceImp">
        <property name="userDao" ref="userDao">
        </property>
    </bean>

    <bean id="loginLog" class="com.user.LoginLog"></bean>

    <aop:config>
        <aop:aspect ref="loginLog">
            <!-- 前置通知 -->
            <aop:before method="loginLogBefore" pointcut="execution(* com.user.UserServiceImp.userLogin(..) )"/>

            <!-- 后置通知 -->
            <aop:after method="loginLogAfter" pointcut="execution(* com.user.UserServiceImp.userLogin(..) )"/>
        </aop:aspect>
    </aop:config>
</beans>

编写Junit测试类TestAop:

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.user.User;
import com.user.UserService;

public class TestAop
{
    @Test
    public void Test1()
    {
        ApplicationContext ctx =  new ClassPathXmlApplicationContext("com/user/User.xml");
        User user= new User();
        user.setPassword("123456");
        user.setUsername("abcd");
        UserService userService= (UserService) ctx.getBean("userService");
        userService.userLogin(user);
    }
}

运行测试类可见:

时间: 2024-08-05 07:26:30

Spring面向切面编程(二)简单AOP实例的相关文章

Spring 面向切面编程(AOP)

Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Control – IOC) 理解依赖注入(DI – Dependency Injection) Bean XML 配置(1)- 通过XML配置加载Bean Bean XML 配置(2)- Bean作用域与生命周期回调方法配置 Bean XML 配置(3)- 依赖注入配置 Bean XML 配置(

Spring面向切面编程

  1.面向切面编程(AOP)的概念:把项目中需要在多处用到的功能,比如日志.安全和事物等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用.   2.术语解释:        横切关注点:分布应用于多处的功能        切面:横切关注点可以被模块化为一个类,这个类被称为一个切面        通知(advice):切面要完成的工作.Spring的通知有5种类型:before.after.after-returning.after-throwing和around这五种类型.    

详解Spring面向切面编程(AOP)三种实现

一.什么是AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合.不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性.异常处理和透明的持续性也都是如此,这

Spring面向切面编程(AOP)

1 spring容器中bean特性 Spring容器的javabean对象默认是单例的. 通过在xml文件中,配置可以使用某些对象为多列. Spring容器中的javabean对象默认是立即加载(立即实例化:spring加载完成,立即创建对象) scope:属性 singleton:默认值为单例,默认也是立即加载,在加载完成spring容器的时候,bean对象已经创建完成 prototype:多例的,默认懒加载,spring容器加载完成的时候,不会创建bean的对象,只有从容器获得bean对象的

Spring面向切面编程(AOP,Aspect&#160;Oriented&#160;Programming)

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等.使用JDK的动态代理可以实现AOP. AOP通过代理的方式都程序动态统一添加功能 现在要给功能4增加一些额外的行为,如处理日志,处理权限等,可以使用代理实现.我们在功能4外面包装一个对象,假设叫A, model原来是直接调用功能4,

Spring-05 -AOP [面向切面编程] -Schema-based 实现aop的步骤

一.AOP [知识点详解] AOP:中文名称面向切面编程 英文名称:(Aspect Oriented Programming) 正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在原有纵向执行流程中添加横切面 3.2 不需要修改原有程序代码 3.2.1 高扩展性 3.2.2 原有功能相当于释放了部分逻辑.让职责更加明确. 面向切面编程是什么? 4.1 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面过程就叫做面向切面编程. 常用概念 5.1 原有功能: 切点, po

spring面向切面编程示例(xml配置形式[email&#160;protected]注解形式)

一.xml配置形式 1.在Spring配置文件中增加面向切面配置当调用com.activemq.service.impl.ConsumerServiceImpl接口实现类的任意方法时执行切面类中的方法. 2.写切面类 注意:1)不能对web层(比如:com.activemq.action.ConsumerController)做代理插入操作,亲测无效.(之前认为对web层进行切面处理无效,其实不是,无效的原因在于切面配置所在的文件,如果是spring-mvc.xml(Springmvc的配置文件

Spring面向切面编程(AOP)

本质上就是代理,只是做成了配置文件形式. 基类 package _10SpringAOP; public class Person { public int id; public String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String n

spring面向切面编程(一)AOP术语

1.连接点(Joinpoint): 连接点是程序执行过程中可以插入切面的特定的点.这个点可以是调用方法时,抛出异常时,甚至修改字段时, 对于Spring而言,只支持方法连接点. 2.切点(Pointcut): 一个类有很多方法,这些方法都是连接点,但是并不是每一个方法都要插入切面,那么就要经过特定的条件过滤,这些 经过过滤后要插入切面的方法被称为切点,所以切点是由一个活多个连接点组成,是连接点集合的一个子集. 3.通知(Advice): 切面所要完成的工作称为通知,它定义的前切点前(before