LogPrint.java@Aspect
public class LogPrint { private final Logger logger = LoggerFactory.getLogger(getClass()); @Pointcut("execution(* com.gosophia.metadataEngine.service.BussinessDataService.*(..))")
private void inBussinessDataServiceImpl() {
} @AfterThrowing(pointcut = "inBussinessDataServiceImpl()", throwing = "ex")
public void doExceptionAction(BusinessException ex) {
logger.error(ex.getMessage(),ex);
System.out.println(".......................");
}
@Before("inBussinessDataServiceImpl()")
public void doAccessCheck(String userName) {
System.out.println("前置通知");
}}配置文件moduleContext.xml如下
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
" >
<context:component-scan base-package="com.gosophia.metadataEngine.dao" />
<context:component-scan base-package="com.gosophia.metadataEngine.service.impl" />
<bean id="logPrint" class="com.gosophia.metadataEngine.common.LogPrint"></bean>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>applicationContext-ut.xml<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
">
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="false" />
<property name="locations">
<list>
<value>classpath:/application-test.properties
</value>
</list>
</property>
</bean> <!-- 数据源配置,在测试环境使用JDBC直接连接 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
....
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
.......
</bean> <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /></beans>测试代码@ContextConfiguration(locations = { "classpath:moduleContext.xml",
"classpath:applicationContext-ut.xml" })
public class UTBussinessDataServiceImpl extends
AbstractTransactionalJUnit4SpringContextTests { @Autowired
private BussinessDataServiceImpl bussinessDataServiceImpl; /**
* 根据metadataTabelId ,查询条件, 分页信息 获取业务数据,metadataTableId为空
*
* @throws BusinessException
*/
@Test(expected = IllegalArgumentException.class)
public void getDataSimpleSearchMetadataTableIdNull()
throws BusinessException {
bussinessDataServiceImpl.getData(null, 1, 1, null, null, "");
}
......
运行测试代码时报如下异常[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@8f9a32] to prepare test instance [com.gosophia.metadataEngine.service.impl.test.unit.UTBussinessDataServiceImpl@96b5c2]
java.lang.IllegalStateException: Failed to load ApplicationContext
......
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationContext-ut.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor': Cannot resolve reference to bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' while setting bean property 'transactionAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:405)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:42)
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:173)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:197)
... 17 more
[/code]找了好多相关的问题,但是没有答案,请高手帮忙解决下
public class LogPrint { private final Logger logger = LoggerFactory.getLogger(getClass()); @Pointcut("execution(* com.gosophia.metadataEngine.service.BussinessDataService.*(..))")
private void inBussinessDataServiceImpl() {
} @AfterThrowing(pointcut = "inBussinessDataServiceImpl()", throwing = "ex")
public void doExceptionAction(BusinessException ex) {
logger.error(ex.getMessage(),ex);
System.out.println(".......................");
}
@Before("inBussinessDataServiceImpl()")
public void doAccessCheck(String userName) {
System.out.println("前置通知");
}}配置文件moduleContext.xml如下
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
" >
<context:component-scan base-package="com.gosophia.metadataEngine.dao" />
<context:component-scan base-package="com.gosophia.metadataEngine.service.impl" />
<bean id="logPrint" class="com.gosophia.metadataEngine.common.LogPrint"></bean>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>applicationContext-ut.xml<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
">
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="false" />
<property name="locations">
<list>
<value>classpath:/application-test.properties
</value>
</list>
</property>
</bean> <!-- 数据源配置,在测试环境使用JDBC直接连接 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
....
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
.......
</bean> <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /></beans>测试代码@ContextConfiguration(locations = { "classpath:moduleContext.xml",
"classpath:applicationContext-ut.xml" })
public class UTBussinessDataServiceImpl extends
AbstractTransactionalJUnit4SpringContextTests { @Autowired
private BussinessDataServiceImpl bussinessDataServiceImpl; /**
* 根据metadataTabelId ,查询条件, 分页信息 获取业务数据,metadataTableId为空
*
* @throws BusinessException
*/
@Test(expected = IllegalArgumentException.class)
public void getDataSimpleSearchMetadataTableIdNull()
throws BusinessException {
bussinessDataServiceImpl.getData(null, 1, 1, null, null, "");
}
......
运行测试代码时报如下异常[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@8f9a32] to prepare test instance [com.gosophia.metadataEngine.service.impl.test.unit.UTBussinessDataServiceImpl@96b5c2]
java.lang.IllegalStateException: Failed to load ApplicationContext
......
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [applicationContext-ut.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor': Cannot resolve reference to bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' while setting bean property 'transactionAttributeSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:405)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:42)
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:173)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:197)
... 17 more
[/code]找了好多相关的问题,但是没有答案,请高手帮忙解决下
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
....
</bean>
瞅瞅你这个下面的配置看有问题没