Spring AOP 注解实现
一共 三个注解
@Component 注入服务
@Aspect 把当前类标识成一个切面供应器读取
@Before(value = "execution(* com.dzqc..*.*(..))") 标识一个前置方法
建造一个接口
package com.dzqc.dao;
public interface UserDao {
void insert();
void select();
void update();
void delete();
}
建造一个类来实现接口
package com.dzqc.dao;
import org.springframework.stereotype.Component;
@Component
public class UserDaoimpl implements UserDao{
@Override
public void insert() {
System.out.println("增加了一个用户");
}
@Override
public void select() {
System.out.println("查询用户信息");
}
@Override
public void update() {
System.out.println("修改了一个用户");
}
@Override
public void delete() {
System.out.println("删除了一个用户");
}
}
XML文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:contexgt="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 会议以下 IOC包扫苗-->
<contexgt:component-scan base-package="com.dzqc"/>
<!-- AOP实现注解自动代理 切面自动代理-->
<aop:aspectj-autoproxy/>
</beans>
切面类
package com.dzqc.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class MyAnnoAdvice {
@Before(value = "execution(* com.dzqc..*.*(..))")
public void before(){
System.out.println("-------------before-----------");
}
}
测试方法
@Test
public void test() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserDao bean = context.getBean(UserDao.class);
bean.select();
}
如果不要XML实现
也可以新建一个类
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
/**
* @EnableAspectJAutoProxy 在启动类中 加上它 就能支持AOP
* @Configuration 当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(.xml)
* @ComponentScan(value = "com.dzqc") 该注解默认会扫描该类所在的包下所有的配置类
*/
@Configuration
@ComponentScan(value = "com.dzqc")
@EnableAspectJAutoProxy
public class Config {
}
测试方法
@Test
public void annotest(){
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao bean1 = classPathXmlApplicationContext.getBean(UserDao.class);
bean1.select();