spring3.0 aop的annotation实现切面,新手学习

本文详细介绍了如何在Spring框架中实现面向切面编程(AOP),包括接口定义、实现类创建、安全处理器配置及应用上下文初始化过程。通过配置SecurityHandler并集成到Spring应用中,实现了在特定方法执行前后的操作,展示了如何在业务逻辑中灵活地进行前置和后置处理。最终通过示例代码演示了如何在客户端调用方法时触发这些增强逻辑,完整地展示了Spring AOP集成的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先有user接口及其实现类userimple

public interface User {

	public void addUser(String name,String password);
	
	public void delUser(String id);
	
	public void updateUser(String id);
	
	public User getUser(int id);
	
}
public class UserImp implements User {

	@Override
	public void addUser(String name, String password) {
		System.out.println("----------addUser----------");
	}

	@Override
	public void delUser(String id) {
		System.out.println("----------delUser----------");
	}

	@Override
	public void updateUser(String id) {
		System.out.println("----------updateUser----------");
	}

	@Override
	public User getUser(int id) {
		System.out.println("----------getUser----------");
		return null;
	}
	
}
再是实现securityHandler,配置相应的aspect和pointcut

@Aspect
public class SecurityHandler2 {

	/**
	 * pointcut 
	 * 参数说明:*,匹配所有返回类型(有返回类型,无返回类型);add*,匹配所有以add开头的方法;..,0个或多个参数
	 * ||可实现多个表达式同时使用
	 */
	@Pointcut("execution(* add*(..)) || (execution(* del*(..))) || (execution(* get*(..)))")
	private void allMethods() {
	}

	/**
	 * Advice
	 * 定义在哪些方法上应用此方法验证
	 */
	@Before("allMethods()")
	public void check() {
		System.out.println("-------------Check Something before------------");
	}
	
	@After("allMethods()")
	public void check1(){
		System.out.println("-----Check Something after----");
	}

}
最后在applicationContext.xml中配置securityhandler及user的实现类

<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"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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">

	<aop:aspectj-autoproxy />

	<bean id="securityHander" class="com.spg.testSpring.example.imp.SecurityHandler" />
	<bean id="user" class="com.spg.testSpring.example.imp.UserImp" />

</beans>

注意必须开启aop对annotation的支持,即:

<aop:aspectj-autoproxy />

<pre>
最后在客户端调用

public static void main(String[] args) {

		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		User user = (User) factory.getBean("user");
		user.addUser("aa", "bb");
		user.delUser("12");
		user.getUser(1);
		
	}

由此可实现进行某些操作的之前或之后进行其他的操作。

最后结果:

-------------Check Something before------------
----------addUser----------
-----Check Something after----
-------------Check Something before------------
----------delUser----------
-----Check Something after----
-------------Check Something before------------
----------getUser----------
-----Check Something after----

ps:

如果用jdk1.7进行编译的时候会出错,具体原因不清楚。换1.6运行就没问题。

因为第一次学习,中间出了很多莫名其妙的错误,最后总结出的解决方法,如果确认代码没问题的,把自己导入的关于aop的包全部删除,再重新导入,确保没有重复的包。这是我自己导入的包,当然可能还有多余的包。





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值