在不为DAO实现类配置切面逻辑的情况下,业务类可以正常调用DAO实现类的方法。但是使用ASPECTJ为DAO实现类配置切面之后爆出异常:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDaoImpl' defined in file [E:\Workspaces\spring_demo\bin\com\rqq\spring\dao\impl\UserDaoImpl.class]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:405)
字符太多省略了点儿。
Caused by: java.lang.NullPointerException
at org.aspectj.weaver.WeakClassLoaderReference.<init>(WeakClassLoaderReference.java:45)
at org.aspectj.weaver.tools.PointcutParser.setClassLoader(PointcutParser.java:228)
at org.aspectj.weaver.tools.PointcutParser.<init>(PointcutParser.java:215)
DAO实现类:
package com.rqq.spring.dao.impl;
import org.springframework.stereotype.Component;
import com.rqq.spring.dao.UserDao;
import com.rqq.spring.entity.User;
@Component
public class UserDaoImpl implements UserDao {
@Override
public void addUser(User u) {
System.out.println("dao.................");
}
}
业务类
package com.rqq.spring.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.rqq.spring.dao.UserDao;
import com.rqq.spring.entity.User;
@Component("userService")
public class UserService {
private UserDao userDao;
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void saveUser(User u) {
System.out.println("service..............");
userDao.addUser(u);
}
}
切面类
package com.rqq.spring.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class BeforeAspect {
@Before("execution(public * com.rqq.spring.dao..*.*(..))")
public void beforeMethod() {
System.out.println("before------>--");
}
}
配置文件:
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.rqq.spring" />
<aop:aspectj-autoproxy />
<!--<bean id="aspect_bean_Name" class="com.rqq.spring.aop.BeforeAspect">
</bean>
<aop:config>
<aop:pointcut expression="execution(public * com.rqq.spring.dao.impl.UserDaoImpl.addUser(..))" id="pointcut_Name"/>
<aop:aspect id="aspect_Name" ref="aspect_bean_Name">
<aop:before method="before" pointcut-ref="pointcut_Name"/>
</aop:aspect>
</aop:config>-->
</beans>
加入的jar文件有:
aspectjrt.jar、aspectjweaver.jar、common-annotations.jar、commons-logging.jar、spring.jar