代码如下:
切面
package com.it.spring.aop;
public class TestAop1 {
public void before() {
System.out.println("前置处理============");
}
}
切入点
package com.it.spring.dao.impl;
import com.it.spring.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("hello AOP!");
}
}
实现接口
package com.it.spring.dao;
public interface UserDao {
void save();
}
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: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/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- XML方式配置-->
<bean id="aop1" class="com.it.spring.aop.TestAop1"></bean>
<bean class="com.it.spring.dao.impl.UserDaoImpl"></bean>
<aop:config>
<aop:aspect id="as" ref="aop1">
<aop:before method="before" pointcut="execution(* com.it.spring.dao.impl.UserDaoImpl.save())"></aop:before>
</aop:aspect>
</aop:config>
</beans>
测试类
package com.it.spring.dao.impl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import static org.junit.Assert.*;
public class UserDaoImplTest {
@Test
public void save() {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext1.xml");
UserDaoImpl bean = context.getBean(UserDaoImpl.class);
bean.save();
}
}
主要Maven配置
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.25.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.25.RELEASE</version>
</dependency>
</dependencies>
运行结果
以上代码运行后报了一个错误:No qualifying bean of type 'com.it.spring.dao.impl.UserDaoImpl' available,但在xml中我们确实有把UserDaoImpl交个容器管理
当我们把UserDaoImpl实现接口UserDao去掉时,修改后代码如下:
package com.it.spring.dao.impl;
import com.it.spring.dao.UserDao;
public class UserDaoImpl {
public void save() {
System.out.println("hello AOP!");
}
}
运行结果
对于这种处理显然不是理想的,但是不知道何种原因,接口实现就是会报错,查阅了很多资料都没有解决,希望各位大神能帮我看看