要弄明白4 --@DeclareParents

@DeclareParents触发方式

有两种触发方式:
  • 第一种触发方式:在使用时自行强转新引入接口类型,然后调用方法。
  • 第二种触发方式:在通知类中,使用this关键字,引入新目标类对象,调用方法

目标类、为需要增强的方法建立一个类

目标类

public interface Waiter{
	void service();
}
@Service("waiter")
public class WaiterImpl implements Waiter{
	@Override
	void service(){
		System.out.println("服务员进行服务");
	}
}

需要添加的方法:拖地

public interface Employee{
	void mopping();
}
@Component
public class EmployeeImpl implements Employee{
	@Override
	public void mopping(){
		System.out.println("职员拖地");
	}
}

在切面类中配置好@DeclareParents

注意 :要先在切面类中配置好@DeclareParents才能通过后面两种触发方法进行代理增强。

@Component
@Aspect
public class LogUtil{
	//配置@DeclareParents,让目标类具备添加方法类中的添加方法。
	@DeclareParents(value = "Waiter+", defaultImp = EmployeeImpl.class)
	private Employee employee;

}

触发方式

  • 第一种:在使用时自行强转新引入接口类型,然后调用方法
public class SpringDeclareParentsTest {
    public static void main(String[] args) {
        //1.创建容器
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        //2.获取对象
        Waiter waiter = ac.getBean("waiter",waiter.class);
        //3.自行强转
        Employee employee = (Employee)employee;
		//4.调用添加的方法
		employee.mopping();
		//5.调用目标类中的方法。
        waiter.service();
    }
}
  • 第二种:在通知类中,使用this关键字,引入新目标类对象,调用方法
@Component
@Aspect
public class LogUtil{
	//配置@DeclareParents,让目标类具备添加方法类中的添加方法。
	@DeclareParents(value = "Waiter+", defaultImp = EmployeeImpl.class)
	private Employee employee;

	@Before("execution(* *.*.(..))&&this(employee)")
	public void printlog(Employee employee){
		employee.mopping();
		System.out.println("打印日志");
	}
}

public class SpringDeclareParentsTest {
    public static void main(String[] args) {
        //1.创建容器
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        //2.获取对象
        Waiter waiter = ac.getBean("waiter",waiter.class);
		//3.调用目标类中的方法。
        waiter.service();
    }
}

更好的博客:https://blog.csdn.net/u010502101/article/details/76944753

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值