欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring AOP原理解析 博客分类: Java AOPSpringBeanSecurityXML 

程序员文章站 2024-03-19 16:12:10
...

AOP概念:

实现AOP有两种方式:

1、采用Annoation注解的方法.

1、接口的设计

package com.hejunfeng.spring;

public interface UserManager
{
    public void modifyUser(String id,String username,String password) ;
    public void deleteUser(String id) ;
    public void addUser(String username,String password) ;
}

2、接口的实现
package com.hejunfeng.spring.impl;
import com.hejunfeng.spring.UserManager;
public class UserManagerImpl implements UserManager
{
    public void addUser(String username, String password)
    {
        System.out.println("----------UserManagerImpl.addUser()----------------");
    }
    public void deleteUser(String id)
    {
        System.out.println("----------UserManagerImpl.deleteUser()----------------");

    }
    public void modifyUser(String id, String username, String password)
    {
        System.out.println("----------UserManagerImpl.modifyUser()----------------");
    }

}

3、定义一个切点

package com.hejunfeng.spring;

public interface MySecurityManager
{

//抽出的一个切点
public void security();
}


4、实现此切点并进行相应的一些操作(annoation注解)

package com.hejunfeng.spring.impl;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import com.hejunfeng.spring.MySecurityManager;
//这里采用注解方式
@Aspect public class MySecurityManagerImpl implements MySecurityManager
{
    //定义切入点addMethod(),只负责用来描述切入那些方法.这里是add方法.其它的可能很多
    //接收所有的ADD方法是否有返回值是否有*无参数都接收
    @Pointcut("execution(* add*(..))")
    private void allAddMethod(){ }
    //定义Advice方法用来标识在切入点的何处进行织入
    //抽出一个切面就是安全性检查security()
    @Before("allAddMethod()")
    public void security()
    {
        System.out.println("---------作用就是进行安全性检查---------");
    }
}


5、applicationContext.xml文件的配置信息:
<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-2.0.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">
<aspectj-autoproxy></aspectj-autoproxy>
<bean id="mySecurityManagerImpl" class="com.hejunfeng.spring.impl.MySecurityManagerImpl"></bean>
<bean id="userManager" class="com.hejunfeng.spring.impl.UserManagerImpl"></bean>
< /beans>


6、测试,和其它方法效果一致
package com.hejunfeng.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hejunfeng.spring.UserManager;
public class TestStatic {
    public static void main(String[] args)
    {
        BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser("何俊峰", "110") ;
    }

}