[Resolvido] Spring + aspectj não funcionando completamente

Pessoal, estou com um problema com aspectos. É a primeira vez q trabalho com aspectos no Spring.

Eu tenho a seqguinte classe onde defino meus aspectos:

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class Log {

	@Pointcut("execution(* dao.UserDB2.insert(..))")
	public void save(){}
	
	@Pointcut("execution(* controllers.AjaxCrudController.removeUser(..))")
	public void remove(){}

	@After("save()")
	public void WriteUserCreationLog(){
		System.out.println("######## An user was added!");
	}

	@After("remove()")
	public void WriteUserRemovalLog(){
		System.out.println("######## An user was removed!");
	}

}

Como teste, eu coloquei um deles em um método de um controller, e outro no método do meu DAO.
O Aspecto que olha o método de meu controller funciona tranquilo (AjaxCrudController.removeUser), mas o outro, que olha o método do DAO, não funciona de jeito nenhhum.

Segue meu controller:

@Controller
@RequestMapping("/ajaxCrud")
public class AjaxCrudController {

	@RequestMapping(value="/saveUser",method=RequestMethod.POST)
	public void saveUser(HttpServletRequest request, HttpServletResponse response) throws IOException{
		
		Map<String, String> json = new HashMap<String, String>();
		
		try{
			
			UserDAO udao = (UserDAO) ContextLoaderListener.getCurrentWebApplicationContext().getBean("userDAO");
			boolean exists = true;
			User user = new User();
			try{
				user = udao.findByIntranetidDeleted(intranetid);
			}catch(EmptyResultDataAccessException e){
				exists = false;
			}
			
			user.setName(request.getParameter("name"));
			user.setIntranetid(request.getParameter("intranetid"));
			user.setDeleted("N");
			
			if(exists){				
				ret = udao.update(user);
				System.out.println("Update");
				json.put("message", "User updated successfully.");
			}else{
				ret = udao.insert(user);
				System.out.println("insert");
				json.put("message", "User created successfully. ");
			}
			
			json.put("status", "ok");
			
		}catch(Exception e){
			json.put("status", "error");
			json.put("message", e.getMessage());			
		}
		
		Gson gson = new GsonBuilder().create();
		response.getWriter().append(gson.toJson(json));
	}
	
	@RequestMapping(value="/removeUser",method=RequestMethod.POST)
	public void removeUser(HttpServletRequest request, HttpServletResponse response) throws IOException{
		
		Map<String, String> json = new HashMap<String, String>();
		
		try{
			Gson gson = new Gson();
			JsonParser parser = new JsonParser();
			JsonArray jsonArray = parser.parse(request.getParameter("ids")).getAsJsonArray();
			List<User> userList = new ArrayList<User>();
			
			for(JsonElement element : jsonArray){
				int id = gson.fromJson(element, Integer.class);
				User user = new User();
				user.setId(id);
				userList.add(user);
			}
			
			UserDAO udao = (UserDAO) ContextLoaderListener.getCurrentWebApplicationContext().getBean("userDAO");
			
			udao.batchRemove(userList);
			json.put("status", "ok");
			json.put("message", "Users deleted successfully.");
			
		}catch(Exception e){
			json.put("status", "error");
			json.put("message", e.getMessage());
		}
		
		Gson gson = new GsonBuilder().create();
		response.getWriter().append(gson.toJson(json));
	}
}

Segue minha interface e classe DAO:

import java.util.List;


public interface UserDAO {

	List<User> findAllUsers();
	User findById(int id);
	User findByIntranetid(String intranetid);
	List<User> findAllByFilter(String intranetid);
	int update(User user);
	int insert(User user);
	void batchRemove(List<User> list);
	User findByIntranetidDeleted(String intranetid);
}

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.stereotype.Component;


@Component
public class UserDB2 extends NamedParameterJdbcDaoSupport implements UserDAO {
	
	private final String INSERT = "INSERT INTO DB.USER (NAME,INTRANETID,DELETED) VALUES (:name,:intranetid,'N')";
	private final String UPDATE = "UPDATE DB.USER SET NAME = :name, INTRANETID = :intranetid,DELETED = :deleted WHERE ID = :id";
	
	public UserDB2(DriverManagerDataSource dataSource){
		this.setDataSource(dataSource);
	}

        @Override
	public int update(User user) {
		MapSqlParameterSource map = new MapSqlParameterSource();
		map.addValue("name", user.getName());
		map.addValue("intranetid", user.getIntranetid());
		map.addValue("id", user.getId());
		map.addValue("deleted", user.getDeleted());
		return getNamedParameterJdbcTemplate().update(this.UPDATE, map);
	}

	@Override
	public int insert(User user) {
		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
		MapSqlParameterSource map = new MapSqlParameterSource();
		map.addValue("name", user.getName());
		map.addValue("intranetid", user.getIntranetid());
		getNamedParameterJdbcTemplate().update(this.INSERT, map,generatedKeyHolder);
		return generatedKeyHolder.getKey().intValue();
	}

Eu adicionei os pacotes de aspectos e interfaces no component-scan, e adicionei o <aop:aspectj-autoproxy /> no meu arquivo de config, alem de criar o bean com a classe do Log,

A aplicacão funciona, o cadastro de usuários está ok, as views, os daos, estão todos ok.
Tentei instanciar o DAO sem usar o getBean do Spring, mas também não funcionou.
Alguém teria alguma dica?
Vlw!

OBS: Alguns códigos podem parecer inconsistentes, mas precisei omitir coisas, devido a politicas da empresa.

Pessoal, depois de uma dezena de pesquisas, achei o problema.

Descobri que o spring, no arquivo de context do servlet, somente se encarrega de escanear pacotes, e executar o que é necessário, somente para o que diz respeito ao contexto web (isso explica o fato de o aspecto escutar métodos do controller, mas não meus DAO’s).

O que fiz, e que é a indicação de muitos, em vários fórums, é criar um contexto web, e um contexto de aplicação, e, nesse contexto de aplicação, refazer todo o scan de packages, colocar as configs de annotation, e etc…

Após essa refatoração no contexto, tudo passou a funcionar corretamente, tanto os aspectos, como o controle transacional.