aop实现

来源:互联网 发布:sql update在哪用 编辑:程序博客网 时间:2024/06/14 13:27

代理分JDK动态代理(代理接口)和CGLIB代理(代理具体类),CGLIB代理是目标对象的子类
aop代理就是由aop框架动态生成的一个对象,spring的aop代理大都由ProxyFactoryBean工厂类产生,配置ProxyFactoryBean需要如下两个属性:1.代理的目标对象 2.处理(Advice)
一、代理接口
实例:基于AOP的权限认证
1.Service组件接口
public interface TestService
{
    void view();
    void modify();
}
2.Service接口实现类
public class TestServiceImpl implements TestService
{
    public void view()
    {
        System.out.println("查看数据");
    }
    public void modify()
    {
        System.out.println("修改数据");
    }
}
3.拦截器类
public class AuthorityInterceptor implements MethodInterceptor
{
    private User user;
    public void setUser(User user)
    {
        this.user=user;
    }
    //必需实现的方法
    public Object invoke(MethodInvocation invocation) throws Throwable
    {
        String methodName=invocation.getMethod().getName();
        if(!user.equals("admin) && !user.equals("registedUser"))
         {
                System.out.println("您无权查看");
                return null;
           }
        else if(user.equals("registedUser") && methodName.equals("modify))
        {
                System.out.println("您不是管理员,无权修改");
                return null;
         }
         else
          {
                return invocation.proceed();
            }
}

4.spring 配置文件
  //1.配置目标bean
<bean id="serviceTarget" class="com.lhb.TestServiceImpl"/>
   //2.配置拦截器
<bean id="authorityInterceptor" class="com.lhb.AuthorityInterceptor">
    <property name="user" value="admin"/>
</bean>
    //3.配置代理工厂Bean,产生aop代理
<bean id="service" class="org.springframework.aop.framework.ProxyFactoryBean">
    //4.指定aop代理所实现的接口
    <property name="proxyInterfaces" value="com.lin.TestService"/>
    //5.指定aop代理所代理的目标bean
    <property name="target" ref="serviceTarget"/>
    //6.指定aop代理所需要的拦截器列表
    <property name="interceptorNames">
            <list>
                    <value>authorityInterceptor</value>
            </list>
      </property>
</bean>

原创粉丝点击