org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
就是这样写的:package org.spring.test;import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;@Aspect
@Component
public class Log {
@Before("execution(public void org.spring.test.UserDAOImpl.save(org.spring.test.User))")
public void myLog() {
System.out.println("You can do sth before this!!!");
}
}
解决方案 »
- 小型数据库系统,请教用哪种语言比较好?
- maven打的包里为什么有的lib是snapshot,有的是带时间戳的?
- 怎样在struts1里面用spring进行拦截
- 如何详细配置tomcat5.5日志?
- 关于Hibernate的几个问题
- jsp变量
- 请教webloigc性能问题
- 【Struts select框】Struts select的框怎么设置初始值?【Struts】
- 我想用Java,但是不知道从什么地方下手,应该看什么书啊?应该如何做才好呢?请大家给我一点建议好吗?
- 看了半本,是关于java与xml编程的书,它用xml来代替数据库,试问,xml真的能开题数据库吗?(在性能方面)
- 关于java内存泄露的问题
- 超级老问题,mysql java编码问题
java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'userDAO' must be of type [org.spring.test.UserDAOImpl], but was actually of type [$Proxy7]
UserService.java:package org.spring.test;import javax.annotation.Resource;import org.springframework.stereotype.Component;@Component("userService")
public class UserService {
private UserDAOImpl userDAOImpl;
public UserDAOImpl getUserDAOImpl() {
return userDAOImpl;
} @Resource(name="userDAO")
public void setUserDAOImpl(UserDAOImpl userDAOImpl) {
this.userDAOImpl = userDAOImpl;
} public void add(User user) {
userDAOImpl.save(user);
}
}
我把UserService.java改成这样的:package org.spring.test;import javax.annotation.Resource;import org.springframework.stereotype.Component;@Component("userService")
public class UserService {
private UserDAO userDAO;//这里不需要new就可以在下面直接使用save方法(IoC的体现)
public UserDAO getUserDAO() {
return userDAO;
} @Resource(name="user")//这是由JSR250提供的
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
} public void add(User user) {
userDAO.save(user);
}
}但是我这里还是有疑问:UserDAO是我定义的接口类,里面就一个save方法,UserDAOImpl是它的实现类,为什么定义成实现类(UserDAOImpl)的setter方法就不行,而定义成接口类(UserDAO)的setter方法就OK了呢?
(1)先是Model。
User.java:package org.spring.test;public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
(2)然后是接口。
UserDAO.javapackage org.spring.test;public interface UserDAO {
void save(User user);
}
(3)接着是接口的实现类。
UserDAOImpl.javapackage org.spring.test;import org.springframework.stereotype.Component;@Component("user")
public class UserDAOImpl implements UserDAO{
public void save(User user) {
String name = user.getUsername();
String pass = user.getPassword();
System.out.println("A user saved!!!\nMy name is "+name+" and my password is "+pass);
}
}
(4)再接着是Bean。
UserService.javapackage org.spring.test;import javax.annotation.Resource;import org.springframework.stereotype.Component;@Component("userService")
public class UserService {
private UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
} @Resource(name="user")
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
} public void add(User user) {
userDAO.save(user);
}
}
(5)最后是业务。
UserServiceTest.javapackage org.spring.test;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserServiceTest {
@Test
public void testAdd() throws Exception {
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
UserService service = (UserService) context.getBean("userService");
User user = new User();
user.setUsername("sonic");
user.setPassword("sonic");
service.add(user);
}
}
我的意思是,现在的情况貌似是setUserDAO的时候注入了UserDAOImpl这个接口实现类,然后再下面的add方法中()public void add(User user) {
userDAO.save(user);
}
可以直接使用接口类中的save方法(不过我想不可能使用接口类的方法,肯定使用的是实现类中的方法),@Before注释的方法在实现类的save方法之前执行了。这些理解不了。是Spring很智能还是我对IoC的理解还不行?
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
好像Spring3.1和这个aopalliance.jar已经不太兼容了吧,aopalliance.jar包里面根本就没有Advice这个文件夹啊