1. 目的
有时候需要用到切面去进行一些业务逻辑或者一些监听器的编写,但是项目不是spring的,切面目标类也不会注入spring容器中,或者项目直接想main启动的时候,这个时候需要进行切面编程只能用动态代理或者cglib,无法用spring带的@Aspect功能
2. 原理
在需要用到Aspect的时候,动态注入需要切面的类到spring容器中
3. 具体实现
主要依赖AnnotationConfigApplicationContext类的启动容器并且注入,直接用AnnotationConfigApplicationContext类可省略启动spring容器启动的大量细节,只取核心的ioc容器功能
3.1 先编写bean注入配置类
package com.ly.register;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.AbstractApplicationContext;
/**
* @Author: luoy
*/
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class RegisterBeanConfig {
public final static String DEFAULT_BEAN = "defaultBean";
public final static String COMPONENT_BEAN = "component";
protected AbstractApplicationContext context;
/**
* 注入defaultBean
* @param defaultBean
* @param context
* @return
*/
@Bean(name = DEFAULT_BEAN)
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public DefaultBean init(DefaultBean defaultBean, AbstractApplicationContext context) {
this.context = context;
return defaultBean;
}
/