有一个切面类里面有两个方法:
- 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>