spring2.5注解切面类出错,为什么?在线等

beans.xml配置

 

<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: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"/>
	<aop:aspectj-autoproxy/>
	<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" /> 

 

 在这里数据源,sessionFactory省略不写了

 

userDao代码:

@Component("userDao")
public class UserDAO extends HibernateDaoSupport {
	private static final Logger log = LoggerFactory.getLogger(UserDAO.class);
	// property constants
	public static final String SEX = "sex";
	public static final String NAME = "name";
	public static final String PASSWORD = "password";
	public static final String AGE = "age";

	protected void initDao() {
		// do nothing
	}
	@Resource(name="sessionFactory")
	public void setBaseSessionFactory(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}

       public List findAll() {
		log.debug("finding all User instances");
		try {
			String queryString = "from User";
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}
}

 UserServiceImpl文件

package com.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.dao.UserDAO;
import com.mode.User;
import com.service.UserService;
@Component("userService")
public class UserServiceImpl implements UserService {
	private UserDAO dao;
	
	public UserDAO getDao() {
		return dao;
	}
	@Resource(name="userDao")
	public void setDao(UserDAO dao) {
		System.out.println("kkkkk");
		this.dao = dao;
	}

	public List<User> list() {
		// TODO Auto-generated method stub
		return dao.findAll();
	}

	public User login(String name, String password) {
		// TODO Auto-generated method stub
		return dao.getUserByNameAndPassword(name, password);
	}

	public User getUserById(String id) {
		// TODO Auto-generated method stub
		return null;
	}

}

 切面代码:

package com.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component("myAspect")
public class MyAspect {
	@Before("execution(* com.dao.UserDAO.*(..))")
	public void before(){
		
		System.out.println("_________________________");
	}
}

测试代码:

ApplicationContext context = new ClassPathXmlApplicationContext("beans7.xml");
		UserService service = (UserService) context.getBean("userService");
		System.out.println(service);
		System.out.println(service.list());
 

 问题:

Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'userDao' must be of type [com.dao.UserDAO], but was actually of type [$Proxy13]

 很奇怪,如果我把切面的@component去掉就可以正常运行;为什么?

 

你可能感兴趣的:(DAO,spring,AOP,bean,xml)