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>
 
發佈了26 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章