当前位置: 代码迷 >> J2EE >> Spring配备了AOP实现自动代理。但是没效果。求解疑。
  详细解决方案

Spring配备了AOP实现自动代理。但是没效果。求解疑。

热度:88   发布时间:2016-04-22 01:04:30.0
Spring配置了AOP实现自动代理。但是没效果。。求解疑。。
有一个切面类里面有两个方法:
Java code
public class CreateAop {    public void doBeofore(){        System.out.println("--------权限验证");    }    public void doAfter(){        System.out.println("--------记录日志");    }}

有个用户接口和实现类:
Java code
public interface UserDao {    public void insert(String name);    public void test();}

Java code
public class UserDaoImpl implements UserDao {    @Override    public void insert(String name) {        System.out.println("你好,"+name);    }    @Override    public void test() {        System.out.println("test success......");    }}

这前面基本上应该是没问题的:在看看applicationContext.xml文件
Java code
<?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"    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-3.0.xsd    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd    http://www.spingframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">    <bean id="userdaoImpl" class="Imp.UserDaoImpl"></bean>    <bean id="CA" class="Aop.CreateAop"></bean>    <!-- 配置AOP -->    <aop:config>        <!-- 配置切面 -->        <aop:aspect id="ap" ref="CA">            <!-- 配置切入点 :expression={返回任意类型或不返回 ,这个包下的任意类的任意方法和任意参数}-->            <aop:pointcut expression="execution(* Imp.*.*(..))" id="ep"/>            <!-- 配置通知 -->            <aop:after method="doAfter" pointcut-ref="ep"/>                <aop:before method="doBeofore" pointcut-ref="ep"/>        </aop:aspect>    </aop:config></beans>

再就是test了:
Java code
public static void main(String[] args) {        ClassPathResource cpr=new ClassPathResource("applicationContext.xml");        XmlBeanFactory factory=new XmlBeanFactory(cpr);        UserDao userdao=(UserDao)factory.getBean("userdaoImpl");        userdao.insert("young");    }

最后的结果只打印了1语句话。按理应该是3句话的。
难道是配置文件写的有问题?这问题纠结了一天。不得不来像大牛们求解。

难道是导包错了??

------解决方案--------------------
先这个:pointcut-ref 在写:method.不知道正确与否!
------解决方案--------------------
main中的内容改为
Java code
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userdao=(UserDao)factory.getBean("userdaoImpl");userdao.insert("young");
------解决方案--------------------
你的包名还是大写的啊。你按住ctrl 看能点进去这两个类吗?<bean id="userdaoImpl" class="Imp.UserDaoImpl"></bean>
  相关解决方案