<aop:config> <aop:pointcut id="mmethod" expression="execution(* com.jc.bus.jttsp.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="mmethod" /> </aop:config>
First check if there is a problem with the pointcut.
If the @Service annotation is scanned by SpringMVC, there is no transaction attribute in the Service.
package com.jc.spring.main; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.FileSystemResource; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; @Configuration @EnableWebMvc @ComponentScan(basePackages={"com.jc.bus.*.web.**"}) public class WebConfig extends WebMvcConfigurerAdapter{ @Bean public ViewResolver viewresolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/view/"); resolver.setSuffix(".jsp"); resolver.setExposeContextBeansAsAttributes(true); return resolver; } @Bean public MultipartResolver multipartResolver() throws IOException{ CommonsMultipartResolver cmr = new CommonsMultipartResolver(); cmr.setUploadTempDir(new FileSystemResource("/tmp/file")); cmr.setMaxUploadSize(1048576); cmr.setMaxInMemorySize(0); return cmr; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(mappingJacksonHttpMessageConverter()); super.configureMessageConverters(converters); } @Bean public JacksonAnnotationIntrospector jacksonAnnotationIntrospector() { return new JacksonAnnotationIntrospector(); } @Bean(name = "objectMapper") public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); mapper.configure(SerializationFeature.INDENT_OUTPUT, false); mapper.setAnnotationIntrospector(jacksonAnnotationIntrospector()); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return mapper; } @Bean public RequestMappingHandlerAdapter requestMappingHandlerAdapter(){ RequestMappingHandlerAdapter amga = new RequestMappingHandlerAdapter(); List<HttpMessageConverter<?>> ls = new ArrayList<HttpMessageConverter<?>>(); ls.add(mappingJacksonHttpMessageConverter()); amga.setMessageConverters (ls); return amga; } @Bean public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() { MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); messageConverter.setObjectMapper(objectMapper()); return messageConverter; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { // TODO Auto-generated method stub configurer.enable(); } }
If you find that the SpringMVC package does scan the service, you can handle it yourself and use Spring to scan the service.
package com.jc.spring.main; import javax.annotation.Resource; import javax.sql.DataSource; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import org.springframework.context.annotation.ImportResource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import com.jc.spring.extend.SpringContextHolder; @Configuration @ComponentScan(basePackages = { "com.jc.spring.extend.**","com.jc.bus.*.service.**" }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) }) @ImportResource(value = { "classpath:/com/jc/spring/main/spring-transaction.xml" }) public class RootConfig { @Resource(name = "dataSource") DataSource dataSource; @Bean(name = "jdbcTemplate") public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource); } }