SSH学习记录(4)-AOP测试

1. 页面加入提交到logLogic方法的按钮

<form action="aopAction!logLogic.action" method="post">

	<input type="submit" value="Submit to aopAction!logLogic"/>

</form>

2. AOPAction中加入logLogic方法。Action和Logic 都复制一份2,测试aop。页面加入提交aopAction2的logLogic的按钮。
	public String logLogic(){

		logic.print();

		return SUCCESS;

	}


3. Logic 改为接口实现,便于使用Spring配置aop。

4. 配置好struts.xml和applicationContext.xml.

struts加入一个Action2
        <action name="aopAction2" class="aopAction2">

        </action>


spring也加入2

    <bean id="aopAction2" class="com.zhch.action.AOPAction2">

    	<property name="logic" ref="aopLogic2"/>

    </bean>

    <bean id="aopLogic2" class="com.zhch.logic.AOPLogicImpl2"/>


5. aop的内容:

  5.1 写接口的拦截器。

package com.zhch.interceptor;



import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;



public class AOPInterceptor implements MethodInterceptor {  

      

    // invoke方法返回调用的结果  

    public Object invoke(MethodInvocation invocation) throws Throwable {  

        String methodName = invocation.getMethod().getName();  

        System.out.println("Before name:"+methodName);

        Object result = invocation.proceed();  

        System.out.println("After name:"+methodName);

        

        return result;

    }  

  

}


  5.2 applicationContext.xml中配置interceptor和aop代理。

  
 <!-- interceptor -->

    <bean id="aopInterceptor"  

        class="com.zhch.interceptor.AOPInterceptor">  

    </bean>

    <!-- ProxyBean -->

	<bean id="aopLogicProxy" class="org.springframework.aop.framework.ProxyFactoryBean">

		<property name="proxyInterfaces">  

            <value>com.zhch.logic.AOPLogic</value>  

        </property>  

        <property name="target" ref="aopLogic"/>

        <property name="interceptorNames">  

            <list>  

                <value>aopInterceptor</value>

            </list>  

        </property> 

	</bean>


  5.3 action中的logic引用代理。

    <bean id="aopAction" class="com.zhch.action.AOPAction">

    	<property name="logic" ref="aopLogicProxy"/>

    </bean>


6. 第二个Logic的配置方法也相同。

7. 如果有许多个Bean要代理的话,这样配置会很麻烦,可以用BeanNameAutoProxyCreator来自动代理。

8. 用BeanNameAutoProxyCreator代理。

  8.1 将原来的<!-- ProxyBean -->删除。

  8.2 配置BeanNameAutoProxyCreator。
	<bean  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

		<property name="beanNames">

			<list>

				<value>*Logic</value>

			</list>

		</property>

		<property name="interceptorNames">  

            <list>  

                <value>aopInterceptor</value>

            </list>  

        </property>

	</bean>


8.3 Action中还是引用原来的Logic的Bean的名字。

8.4 多个配置文件中的符合名字正则的都会被代理。



总结:

1. 用ProxyFactoryBean

   1.1 接口和它的实现类都有了,写好。

   1.2 写接口的拦截器

   1.3 在spring中配置拦截器和代理,别的类引用就好了。

2. 用BeanNameAutoProxyCreator

  2.1 接口和它的实现类都有了,写好。

   1.2 写接口的拦截器

   1.3 在spring中配置拦截器和代理,这里引用Bean还是引用原来的Bean就可以了,

   BeanNameAutoProxyCreator会自动代理符合它名字正则表达式的bean。

  

附加1. Spring多配置文件

在web.xml中加入context-param元素,给listener用。

用*表示多个,也可以直接写名字。
    <listener>

    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

	</listener> 

	<context-param>

		<param-name>contextConfigLocation</param-name>

		<param-value>

			/WEB-INF/applicationContext.xml;

			/WEB-INF/applicationContext-*.xml

		</param-value>

	</context-param>




附加2. struts2多配置文件

方法1.

在struts.xml中加入下面的文字就可以解决了
	<include file="struts-default.xml">

	<include file="struts_001.xml">

	<include file="struts_002.xml">




如果是多级包含,主要的包含struts_001.xml,struts_001.xml包含struts_002.xml

则主要的里面是
<include file="struts_001.xml">


struts_001.xml里面是

<include file="struts_002.xml">


如果有多级目录则每一个包含都要写从class开始的全称目录

比如struts_001.xml,struts_002.xml都在com.zhch包中,主包含struts_001.xml,struts_001.xml包含struts_002.xml.

则主要里面是
<include file="com/zhch/struts_001.xml">


struts_001.xml里面是

<include file="com/zhch/struts_002.xml">

你可能感兴趣的:(spring,AOP,xml,struts,ssh)