`Aspectj-aop实现
1、添加aspectj依赖
2、编写Aspect代理类,重点注意:在代理类方法的注解里,有需要代理的目标对象或目标对象的方法
3、配置文件必须添加:aop:aspectj-autoproxy/,让spring知道你使用aspectj动态代理
1)如使用xml方式实现动态代理,就在配置文件中声明目标对象和代理对象的bean
2)如使用注解方式实现动态代理,就在配置文件中添加包扫描标签 <context:component-scan base-package=“com.*”/>
并在目标类和代理类上添加@Component组件注解
4、在main方法下开始使用动态代理,通过ClassPathXmlApplicationContext的构造器获取ApplicationContext对象,通过ApplicationContext
的getBean方法获取目标类的bean,通过bean调用被代理的方法。
`
applicationContext-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"
xmlns:context="http://www.springframework.org/schema/context"
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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--声明使用aspectj动态代理-->
<aop:aspectj-autoproxy/>
<!--xml声明bean-->
<!-- <bean id="UserService" class="com.nodePower.service.impl.UserServiceImp"/>-->
<!-- <bean id="proxy" class="com.nodePower.Myspectj"/>-->
<!--通过扫描包中的注解获取bean-->
<context:component-scan base-package="com.nodePower"/>
</beans>
package com.nodePower;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class Myspectj {
重点注意:在代理类方法的注解里,有需要代理的目标对象或目标对象的方法
@Before("execution( public void add())")
public void myBefore(){
System.out.println("前置执行");
}
}
package com.nodePower.service;
public interface UserService {
void add();
}
package com.nodePower.service.impl;
import com.nodePower.dao.UserDao;
import com.nodePower.service.UserService;
import org.springframework.stereotype.Component;
@Component("userService")
public class UserServiceImp implements UserService {
@Override
public void add() {
System.out.println("重写方法");
// userDao.add();
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
package com;
import com.nodePower.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String...args) throws Throwable {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("AopContext.xml");
UserService proxy = (UserService) applicationContext.getBean("userService");
proxy.add();
}
}