简单实现一个用户登陆的功能,在用户登陆之前进行日志打印,用户登陆之后进行登陆成功日志打印。
添加Spring AOP的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