spring AOP 代理(代理接口)

spring AOP 代理(代理接口)

代理分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>
以上配置中目标bean被暴露在容器中,可以被 客房端代码直接访问,所以将目标bean定义成代理工厂的嵌套bean:
配置拦截器
<bean id="authorityInterceptor" class="com.lhb.AuthorityInterceptor">
    <property name="user" value="admin"/>
</bean>
.配置拦截器
<bean id="authorityInterceptor" class="com.lhb.AuthorityInterceptor">
    <property name="user" value="admin"/>
</bean>
配置代理工厂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">
            //以嵌套bean的形式定义目标bean,避免客户端直接访问目标bean
            <bean class="com.lin.TestServiceImpl">
    </proterty>
    //6.指定aop代理所需要的拦截器列表
    <property name="interceptorNames">
            <list>
                    <value>authorityInterceptor</value>
            </list>
      </property>
</bean>

你可能感兴趣的:(spring AOP 代理(代理接口))